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


相关推荐

  • AndroidO(8.0) 和 Android P(9.0)

    大早上躺床上就索性百度了下p和o发现百度百科的说明还是很简洁易懂的2017年8月22日,谷歌正式发布了Android8.0的正式版,其正式名称为:AndroidOreo(奥利奥) 。奥利奥版安卓的聚焦重点是电池续航能力、速度和安全,让用户更好地控制各种应用程序,加大了对App在后台操作的限制。这种限制在一定程度上延长了安卓机在“睡眠”(Doze)模式下的电池的续航能力,它让不在使用的App进…

    2022年4月7日
    43
  • windows退出vim

    windows退出vim在普通模式下,用ZZ来保存并退出,用ZQ不保存退出。在插入模式下,先按来回到普通模式,再按ZZ或者ZQ。(注意:ZZ或者ZQ直接按,要大写。)

    2022年5月1日
    50
  • 玩转pycharm_pycharm首次使用教程

    玩转pycharm_pycharm首次使用教程点击“简说Python”,选择“星标公众号”福利干货,第一时间送达!本文授权转载自Python编程时光,禁二次转载作者:Python编程时光阅读文本大概需要6分钟。大…

    2022年8月26日
    6
  • Android中的像素密度,屏幕密度,屏幕大小,分辨率,ldpi,mdpi,xhdpi,xxhdpi

    Android中的像素密度,屏幕密度,屏幕大小,分辨率,ldpi,mdpi,xhdpi,xxhdpiAndroid开发为适配不同屏幕需要在资源文件中添加多套图片或者多套布局文件,这篇文章讲解多套图片。ldpi,mdpi,xhdpi,xxhdpi,xxxhdpi分别代表什么?如何使用。1屏幕大小智能手机普及,屏幕也随之越来越大,从经典的iPhone4的3.5英寸到iphoneXR6英寸多,Android手机也逐渐进入了6.x英寸行列。屏幕大小定义:手机对角线的物理尺寸,以英寸(in…

    2022年6月8日
    95
  • Spring Boot 中的 Starters

    Spring Boot 中的 StartersSpringBoot 中的 Starters

    2025年6月11日
    5
  • 解决VMware 15虚拟机桥接模式无法上网 问题

    解决VMware 15虚拟机桥接模式无法上网 问题详细描述解决VMware15虚拟机桥接模式无法上网问题步骤1:查看本地以太网属性是否安装VMwareBridgeProtocol控制面板>>网络和Internet>>网络连接>>以太网右键属性>>查看是否有安装VMwareBridgeProtocol共享网络给虚拟机(有些电脑不用)步骤2:查看VMware虚拟网络编辑器的VMne…

    2022年6月6日
    113

发表回复

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

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