swoole websocket 支持ssl,修改成https

1. 安装swoole的openssl支持。

重新编译安装swoole源码,加上--enable-openssl

%PHP_BIN%/phpize
cd swoole_src
./configure --enable-openssl
make && make install
  • 利用php --ri swoole来查看是否安装成功,如图就是已经安装成功;

2. 代码中使用websocket ssl代替ws

  • 服务端,比较上次代码,做出以下改变即可
//初始化类的时候,加上openssl参数
$serv = new swoole_websocket_server(":", 8080, SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL);
//配置证书文件位置
$key_dir = "YOUR_KEY_DIR";
$serv->set(array(
                'work_num'=>1,
                'ssl_cert_file'=>$key_dir.'/file.crt',
                'ssl_key_file' =>$key_dir.'file.key'
                )
            );
  •  
  • 客户端,将连接换为wss即可
var wsl = "wss://domain/path";
ws = new WebSocket(wsl);
### ThinkPHP 集 Swoole WebSocket 教程及宝塔面板配置 #### 一、环境准备 为了在 ThinkPHP 中使用 Swoole 实现 WebSocket,在开始之前需确认服务器已安装并正确配置 PHP 和 Swoole 扩展。如果需要启用 SSL 支持,则还需确保 Swoole 已通过 `--enable-openssl` 参数重新编译[^2]。 #### 二、Swoole 的安装与配置 1. **安装 Swoole** 如果尚未安装 Swoole,可以通过以下命令完安装: ```bash pecl install swoole ``` 或者手动下载源码包后执行如下操作以支持 OpenSSL: ```bash phpize ./configure --enable-openssl --with-php-config=/path/to/php-config make && make install ``` 2. **加载扩展** 编辑 `php.ini` 文件,添加或修改以下内容以加载 Swoole 扩展: ```ini extension=swoole.so ``` 3. **验证安装** 运行以下命令检查 Swoole 是否功安装以及是否启用了 OpenSSL 功能: ```bash php -m | grep swoole php -i | grep swoole ``` #### 三、ThinkPHP 中实现 WebSocket 以下是基于 ThinkPHP5.0 结合 Swoole 开发 WebSocket 聊天功能的具体方法: 1. **创建入口文件** 在项目根目录下的 `public/` 监听 WebSocket 请求的启动脚本 `websocket.php`: ```php <?php namespace app\index; use think\facade\App; use Swoole\Http\Request; use Swoole\Http\Response; use Swoole\WebSocket\Server as WSServer; class Websocket { protected $server; public function start() { $this->server = new WSServer('0.0.0.0', 9501); // 设置回调函数 $this->server->on('open', [$this, 'onOpen']); $this->server->on('message', [$this, 'onMessage']); $this->server->on('close', [$this, 'onClose']); echo "WebSocket Server started on port 9501\n"; $this->server->start(); } public function onOpen($server, Request $request) { echo "Client {$request->fd} connected.\n"; } public function onMessage($server, $frame) { echo "Received message: {$frame->data}\n"; foreach ($server->connections as $connection) { $server->push($connection, json_encode([ 'type' => 'new_message', 'content' => htmlspecialchars($frame->data), ])); } } public function onClose($server, $fd) { echo "Client {$fd} closed.\n"; } } (new Websocket())->start(); ``` 2. **运行 WebSocket 服务** 启动 WebSocket 服务时可以指定绑定模块,默认情况下会映射到 `Home` 模块中的控制器路径[^1]。例如: ```bash php public/index.php home/Websocket/start ``` #### 四、宝塔面板配置 1. **防火墙设置** 登录宝塔面板后进入安全选项卡,开放 WebSocket 使用的端口(如上例中的 9501)。点击【放行端口】按钮即可。 2. **反向代理配置** 若希望将 WebSocket 流量通过 HTTPS 协议转发至本地监听的服务实例,可按以下方式设置 Nginx 反代规则: - 前往站点管理页面 -> 【配置文件】编辑区域; - 添加类似下面的内容来处理 ws/wss 请求路由转换逻辑: ```nginx location /ws/ { proxy_pass http://127.0.0.1:9501/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $host; proxy_read_timeout 86400s; } ``` 3. **HTTPS/WSS 支持** 若要提供更安全可靠的通信机制,请参照官方文档说明为域名申请免费证书或者上传已有 CA 认证过的公私钥对材料。完后记得重启相关组件生效更改后的参数设定值。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值