Swoole WebSocket开启SSL支持 使用wss连接「建议收藏」

Swoole WebSocket开启SSL支持 使用wss连接

大家好,又见面了,我是全栈君。

首先要申请SSL证书,必须为pem格式。

如图为宝塔环境所申请Let’s Encrypt免费证书的所在位置:

Swoole WebSocket开启SSL支持 使用wss连接「建议收藏」

Linux安装openssl支持:

yum install -y openssl

移到Swoole安装包目录,重新编译安装,并加入openssl支持:(相关文章:Linux下源码包安装Swoole及基本使用)

phpize
 
./configure --enable-openssl --with-php-config=/www/server/php/72/bin/php-config
 
make clean
 
make && make install

查看Swoole已经开启openssl支持:

php --ri swoole

Swoole WebSocket开启SSL支持 使用wss连接「建议收藏」

Websocket服务器中开启SSL隧道,并配置证书路径:

ws_server.php:

<?php
    //创建websocket服务器对象,监听0.0.0.0:9501端口,开启SSL隧道
    $ws = new swoole_websocket_server("0.0.0.0", 9501, SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL);
    
    //配置参数
    $ws ->set([
	'daemonize' => false, //守护进程化。
	//配置SSL证书和密钥路径
	'ssl_cert_file' => "/etc/letsencrypt/live/oyhdo.com/fullchain.pem",
	'ssl_key_file'  => "/etc/letsencrypt/live/oyhdo.com/privkey.pem"
    ]);
 
    //监听WebSocket连接打开事件
    $ws->on('open', function ($ws, $request) {
        echo "client-{$request->fd} is open\n";
    });
 
    //监听WebSocket消息事件
    $ws->on('message', function ($ws, $frame) {
        echo "Message: {$frame->data}\n";
        $ws->push($frame->fd, "server: {$frame->data}");
    });
 
    //监听WebSocket连接关闭事件
    $ws->on('close', function ($ws, $fd) {
        echo "client-{$fd} is closed\n";
    });
 
    $ws->start();

页面js中即可使用wss连接WebSocket服务器(使用与证书对应的域名):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>WebSocket</title>
</head>
<body>
</body>
<script type="text/javascript">
var websocket = new WebSocket('wss://www.oyhdo.com:9501'); 
 
websocket.onopen = function (evt) { onOpen(evt) }; 
websocket.onclose = function (evt) { onClose(evt) }; 
websocket.onmessage = function (evt) { onMessage(evt) }; 
websocket.onerror = function (evt) { onError(evt) }; 
 
function onOpen(evt) {
	console.log("Connected to WebSocket server."); 
	websocket.send('666');
} 
function onClose(evt) { 
	console.log("Disconnected"); 
}
function onMessage(evt) { 
	console.log('Retrieved data from server: ' + evt.data); 
} 
function onError(evt) { 
	console.log('Error occured: ' + evt.data); 
}
</script>
</html>

启动WebSocket服务:

php ws_server.php

浏览器访问结果:(注意必须为https访问)

Swoole WebSocket开启SSL支持 使用wss连接「建议收藏」

服务器监听结果:

Swoole WebSocket开启SSL支持 使用wss连接「建议收藏」

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/111937.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Kali 更新源(国内镜像)

    Kali 更新源(国内镜像)1.更新软件源sudovim/etc/apt/sources.list2.选择比较合适的源(选择一个即可)#中科大debhttp://mirrors.ustc.edu.cn/kalikali-rollingmainnon-freecontribdeb-srchttp://mirrors.ustc.edu.cn/kalikali-rollingmainnon-freecontrib#阿里云debhttp://mirrors.aliyun.com/kalikali-ro

  • 一篇读懂:Android手机如何通过USB接口与外设通信(附原理分析及方案选型)

    一篇读懂:Android手机如何通过USB接口与外设通信(附原理分析及方案选型)0背景1.手机USB接口通信特点-1.1使用方便-1.2通用性强-1.3速度快-1.4可采用总线供电2.手机USB接口通信原理-2.1常见手机USB接口-2.2通信过程-2.3体系架构2.4软件层次3.手机USB接口与外设通信方案-3.1USB(手机)USB(外设)-3.1.1USBHost简述

  • sql 时间转字符串_字符串举例

    sql 时间转字符串_字符串举例一、日期时间类型转换为字符串:SelectCONVERT(varchar(100),GETDATE(),0):052020213:47PMSelectCONVERT(varchar(100),GETDATE(),1):05/20/21SelectCONVERT(varchar(100),GETDATE(),2):21.05.20SelectCONVERT(varchar(100),GETDATE(),3):20/05/21SelectCONVERT(var

  • linux signal 处理

    linux signal 处理

  • bootstrap table editable 文档_手机版pdf编辑器中文版

    bootstrap table editable 文档_手机版pdf编辑器中文版>BootstraptableAPI中文文档(完整翻译文档)*$(‘#table’).bootstrapTable({});*看网上有中文版的,但有些就是字面直接译过来了,而且有的就没有翻译,那就打算自己再翻译一遍,每一条会尽*最大可能结合尽可能多资料翻译,如果发现译的内容比英文多,是添加了更详细的说明,表的名称,属性,类型,

  • 高手解决DISK BOOT FAILURE,INSERT SYSTEM DISK AND PRESS ENTER

    高手解决DISK BOOT FAILURE,INSERT SYSTEM DISK AND PRESS ENTER1、首先要先确定你加电启动的时候有没有认出你的硬盘。这点在bios里可查。如果开机「滴」的一声短声,证明开机自检没问题(排除硬件问题,但不包括硬盘没有识别)。此时按del键进入bios,看你的硬盘有没

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号