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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • WPF TextBox使用密码样式

    WPF TextBox使用密码样式WPF的Textbox并没有password样式,可以手动更改<TextBoxWidth=”200″Margin=”10,0,0,0″Text=”{BindingappData.CurrentUser.LoginPwd}”Background=”Transparent”><TextBo

    2022年7月25日
    11
  • Android Toast的几种使用方式「建议收藏」

    Android Toast的几种使用方式「建议收藏」Toast是Android中常用的组件,下面介绍下Toast使用的几种方式和注意事项。Toast的使用方式简单来说有下面五种:1、默认的显示//第一个参数:当前的上下文环境。可用getApplicationContext()或Activity的context//第二个参数:要显示的字符串。也可是R.string中字符串ID//第三个参数:显示的时间长短。Toast默认的有两个LENGTH_LONG(长)和LENGTH_SHORT(短),也可以使用毫秒如2000msToast

    2022年9月12日
    0
  • pytest 执行用例_测试用例执行结果有哪些

    pytest 执行用例_测试用例执行结果有哪些前言平常我们功能测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟,如果单个测试人员执行需要1000分钟才能跑完当项目非常紧急时,会需要协调多个测试资源来把任务分成两部分,于是执行时间

    2022年7月30日
    7
  • 通俗易懂的Mybatis工作原理[通俗易懂]

    作为半自动的ORM框架,Mybatis被越来越多的企业接受。搞清楚它的工作原理以及底层实现,对于开发者可事半功倍。很多文章都是使用大批量的源码流程去分析原理。对于有源码阅读功底的开发者,也许还能招架住,但还是不直观。我以前的很多文章都是这么做的,后来有朋友私信建议说,这些文章类似于个人笔记,只能自己阅读,不利于分享,所以,本文将尝试采用通俗易懂的白话文带领大家认识一下Mybatis的工作原理。(PS:大家可以设想,如果自己在开发Mybatis,该如何设计好Mybatis的功能呢?)一...

    2022年4月17日
    38
  • django动态路由_路由器如何建立路由表

    django动态路由_路由器如何建立路由表自定义路径转换器有时候上面的内置的url转换器并不能满足我们的需求,因此django给我们提供了一个接口可以让我们自己定义自己的url转换器django内置的路径转换器源码解析在我们自定义路由转

    2022年7月31日
    5
  • iso qemu 安装ubuntu_ubuntu – Android-x86_64安装程序无法在QEMU / KVM中启动 – 而是显示EFI Shell…

    iso qemu 安装ubuntu_ubuntu – Android-x86_64安装程序无法在QEMU / KVM中启动 – 而是显示EFI Shell…我想将它安装到运行在Ubuntu16.0464位上的虚拟机上,UEFI使用QEMU/KVM和virt-manager作为图形前端.安装OVMF并正确配置虚拟机管理程序,作为具有UEFI的Ubuntu测试虚拟机,其虚拟磁盘文件和安装程序映像在同一位置正常工作.但是,当我使用下面转储的设置启动新创建的VM并将下载的Android-x86映像安装到虚拟CD驱动器中时,它不会启动但显示EFISh…

    2022年7月19日
    22

发表回复

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

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