準(zhǔn)備工作
申請(qǐng) SSL 證書(shū)殿遂,傳送 阿里云免費(fèi)SSL證書(shū)申請(qǐng);
首先安裝 swoole 擴(kuò)展闯传,傳送 Lnmp Swoole擴(kuò)展安裝摩桶。
開(kāi)啟SSL支持
- 安裝openssl
$ apt install openssl
- 進(jìn)入 swoole 安裝包目錄
$ cd swoole-1.7.21
- 運(yùn)行 phpize
$ /usr/bin/phpize
- 重新編譯安裝,并加入 openssl 支持
$ ./configure --enable-openssl --with-php-config=/usr/bin/php-config
- 清除臨時(shí)文件
$ make clean
清除上次的 make 命令所產(chǎn)生的 object 文件(后綴為“.o”的文件)及可執(zhí)行文件雇初。
- 構(gòu)建并安裝
$ make && make install
- 查看 swoole 是否已經(jīng)開(kāi)啟 openssl 支持
$ php --ri swoole | grep openssl
openssl => enabled
搭建WebSocket服務(wù)端
- 創(chuàng)建 server.php,代碼如下
<?php
//創(chuàng)建websocket服務(wù)器對(duì)象减响,監(jiān)聽(tīng)0.0.0.0:9501端口靖诗,開(kāi)啟SSL隧道
$ws = new swoole_websocket_server("0.0.0.0", 9501, SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL);
//配置參數(shù)
$ws ->set([
'max_conn'=>1000,
'task_worker_num' => 2,
'daemonize' => false, //守護(hù)進(jìn)程化。
//配置SSL證書(shū)和密鑰路徑
'ssl_cert_file' => "/etc/nginx/cert/socket.yuhal.com.pem",
'ssl_key_file' => "/etc/nginx/cert/socket.yuhal.com.key"
]);
//監(jiān)聽(tīng)WebSocket連接打開(kāi)事件
$ws->on('open', function ($ws, $request) {
echo "client-{$request->fd} is open\n";
});
//監(jiān)聽(tīng)WebSocket消息事件
$ws->on('message', function ($ws, $frame) {
echo "Message: {$frame->data}\n";
$ws->push($frame->fd, "server: {$frame->data}");
});
//監(jiān)聽(tīng)WebSocket連接關(guān)閉事件
$ws->on('close', function ($ws, $fd) {
echo "client-{$fd} is closed\n";
});
$ws->start();
- 啟動(dòng) WebSocket 服務(wù)
$ php server.php