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连接「建议收藏」

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python编程爱心-如何用python画爱心「建议收藏」

    python编程爱心-如何用python画爱心「建议收藏」用python绘制爱心的基本步骤如下:首先先下载安装好python程序。在我们自己的电脑上找到python的IDLE工具。2.然后打开IDLE,新建一个文件,命名为test1.py。3.接着我们就开始导入turtle库,然后编辑代码。importturtleimporttime#画心形圆弧defhart_arc():foriinrange(200):turtle.right(1)t…

    2025年9月27日
    4
  • PyCharm2021安装教程

    PyCharm2021安装教程Windows安装pycharm教程新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入下载安装PyCharm1、进入官网PyCharm的下载地址:http://www.jetbrains.com/pycharm/downl

    2022年5月16日
    54
  • python怎么表示取余_python如何实现取余操作

    python怎么表示取余_python如何实现取余操作python实现取余操作的方法:可以利用求模运算符(%)来实现。求模运算符可以将两个数相除得到其余数。我们还可以使用divmod()函数来实现取余操作,具体方法如:【divmod(10,3)】。在python中要实现取余操作可以使用求模运算符(%),该运算符可以将两个数相除得到其余数。(推荐教程:Python入门教程)如果一个数恰好能被另外一个数据整除,则余数为0,%运算后返回结果为0。可利用余数…

    2022年4月25日
    57
  • 模态框 modal data-toggle data-target

    模态框 modal data-toggle data-target

    2021年11月8日
    37
  • linux图形界面扩容lvm,linux下对LVM扩容

    linux图形界面扩容lvm,linux下对LVM扩容操作环境:VirtualBox下RedHat6.464位版本扩容原因:/dev/vg_rhel64/lv_root占用率达到100%,导致部分应用无法继续运行操作过程:1.关闭系统,在虚拟机中添加一块10G的磁盘2.查看新添加磁盘对应的名称[root@rhel64~]#fdisk-cul得知磁盘对应名称为/dev/sdc3.给sdc分区,只分一个区sdc1[root@rhel64…

    2022年6月20日
    22
  • 深度学习检测小目标常用方法

    深度学习检测小目标常用方法

    2020年11月14日
    183

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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