php ssl websocket,Swoole WebSocket开启SSL支持 使用wss连接

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

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

a62f138d91fc

image

Linux安装openssl支持:

yum install -y openssl

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

$ sudo /usr/bin/phpize # 如果不知道路径,请使用find / -name "phpize" 进行查找

$ sudo ./configure --enable-openssl --with-php-config=/www/server/php/72/bin/php-config

$ sudo make clean make && make install

#这个注意php-config的目录是你php真实安装路径

#宝塔面板可以点击php查看安装路径 ,我的是在/www/server/php/72/bin/php-config

#如果是集成环境,需要使用名 find / -name "php-config" 查询路径。还有phpize的路路径和php-config基本是一个路径 ,/www/server/php/72/bin/phpize

开启swoole扩展

$ cd /etc/php.d/

$ sudo vim php.ini

; Enable xsl extension module

extension=swoole.so

查看Swoole已经开启openssl支持:

php --ri swoole

a62f138d91fc

image

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

ws_server.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服务器(使用与证书对应的域名):

WebSocket

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);

}

启动WebSocket服务:

php ws_server.php

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

a62f138d91fc

image

服务器监听结果:

a62f138d91fc

image

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值