Swoole WebSocket开启SSL支持 使用wss连接

举报
lxw1844912514 发表于 2022/03/28 23:52:14 2022/03/28
【摘要】 首先要申请SSL证书,必须为pem格式。 如图为宝塔环境所申请Let's Encrypt免费证书的所在位置: Linux安装openssl支持: yum install -y openssl 移到Swoole安装包目录,重新编译安装,并加入openssl支持:(相关文章:Linux下源码包安装Swoole及基本使用) p...

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

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

Linux安装openssl支持:

yum install -y openssl
 


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


  
  1. phpize
  2.  
  3. ./configure --enable-openssl --with-php-config=/www/server/php/72/bin/php-config
  4.  
  5. make clean
  6.  
  7. make && make install


查看Swoole已经开启openssl支持:

php --ri swoole
 

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

ws_server.php:


  
  1. <?php
  2. //创建websocket服务器对象,监听0.0.0.0:9501端口,开启SSL隧道
  3. $ws = new swoole_websocket_server("0.0.0.0", 9501, SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL);
  4. //配置参数
  5. $ws ->set([
  6. 'daemonize' => false, //守护进程化。
  7. //配置SSL证书和密钥路径
  8. 'ssl_cert_file' => "/etc/letsencrypt/live/oyhdo.com/fullchain.pem",
  9. 'ssl_key_file' => "/etc/letsencrypt/live/oyhdo.com/privkey.pem"
  10. ]);
  11. //监听WebSocket连接打开事件
  12. $ws->on('open', function ($ws, $request) {
  13. echo "client-{$request->fd} is open\n";
  14. });
  15. //监听WebSocket消息事件
  16. $ws->on('message', function ($ws, $frame) {
  17. echo "Message: {$frame->data}\n";
  18. $ws->push($frame->fd, "server: {$frame->data}");
  19. });
  20. //监听WebSocket连接关闭事件
  21. $ws->on('close', function ($ws, $fd) {
  22. echo "client-{$fd} is closed\n";
  23. });
  24. $ws->start();


页面js中即可使用wss连接WebSocket服务器(使用与证书对应的域名):


  
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <title>WebSocket</title>
  5. </head>
  6. <body>
  7. </body>
  8. <script type="text/javascript">
  9. var websocket = new WebSocket('wss://www.oyhdo.com:9501');
  10. websocket.onopen = function (evt) { onOpen(evt) };
  11. websocket.onclose = function (evt) { onClose(evt) };
  12. websocket.onmessage = function (evt) { onMessage(evt) };
  13. websocket.onerror = function (evt) { onError(evt) };
  14. function onOpen(evt) {
  15. console.log("Connected to WebSocket server.");
  16. websocket.send('666');
  17. }
  18. function onClose(evt) {
  19. console.log("Disconnected");
  20. }
  21. function onMessage(evt) {
  22. console.log('Retrieved data from server: ' + evt.data);
  23. }
  24. function onError(evt) {
  25. console.log('Error occured: ' + evt.data);
  26. }
  27. </script>
  28. </html>

启动WebSocket服务:

php ws_server.php
 

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

服务器监听结果:

文章来源: blog.csdn.net,作者:lxw1844912514,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/lxw1844912514/article/details/104059115

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。