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)
上一篇 2022年2月12日 下午8:00
下一篇 2022年2月12日 下午8:00


相关推荐

  • 操作系统 进程调度算法_进程调度算法实验报告

    操作系统 进程调度算法_进程调度算法实验报告进程调度算法一、先来先服务(FCFS)基本思想:先到达的进程先进入就绪队列,先进行调度的原则。非抢占方式。二、短作业优先(SJF)基本思想:根据进程中的执行时间,选取执行时间最短的作业优先调度;可有抢占或非抢占方式。三、优先权高者优先(HPF)基本思想:系统根据作业的优先权进行作业调度,每次选取优先权高的作业优先调度。作业的优先权通常用一个整数表示,也叫做优先数。可有抢占或非抢占方式。…

    2022年9月29日
    6
  • 150美金Grok API数据共享活动结束啦!附上免费2个月SuperGrok教程!

    150美金Grok API数据共享活动结束啦!附上免费2个月SuperGrok教程!

    2026年3月15日
    2
  • .htaccess文件中RewriteCond详解

    .htaccess文件中RewriteCond详解Apache中RewriteCond语句对于我来说一直是个难点,多次试图去把它搞明白,都没有结构,这次我终于算大概知道它的意思了RewriteCond就像我们程序中的if语句一样,表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的RewriteRule语句,这就是RewriteCond最原始、基础的功能,为了方便理解,下面来看看几个例子。复制代码代码如下:…

    2022年5月25日
    37
  • 字体格式及缩放不要设置怎么做_退库单格式

    字体格式及缩放不要设置怎么做_退库单格式使用libyuv库在Linux下对NV12格式进行缩放

    2026年3月4日
    4
  • JWT的权限控制与Shiro入门

    JWT的权限控制与Shiro入门

    2021年11月12日
    49
  • TIKA安装与使用

    TIKA安装与使用TIKA 使用报告一 TIKA 简介 ApacheTika 是一个用 java 编写的内容检测和分析框架 是 Apache 的 Lucene 项目的子项目 它能够检测很多不同文件类型的文件 并提取文件的元数据和结构化文本 它提供了一个命令行界面和一个 GUI 界面 还提供一个 java 库 可用于自然语言处理过程中文本内容的抽取 以及搜索引擎进行数据抓取后的处理步骤 1 1 语言检测机制每当一个文本文件被传递到 Ti

    2026年3月19日
    3

发表回复

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

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