由於公司年會要使用彈幕,又要過濾銘感詞,所有必須自己做
首先要給小程序提供 wss://xxx.com/websocket 這種沒有端口形式的
意思就是服務器這邊要使用443端口 ,也可以nginx轉發443端口 ,我這邊先記錄下使用443端口的方式
1.首先在面板上運行 fuser -k 443/tcp 殺掉該服務器的443端口
2.在nginx中的配置文件中 加入
upstream backend{
server 127.0.0.1:443;
}
·
3在寶塔中建立1個站點分別綁定1個域名 這裏 xx2.com
下面文件名爲server.php 代碼監聽443端口 ,放在 xx2.com 目錄中 ,運行php server.php
<?php
$server = new swoole_websocket_server("0.0.0.0", 443,SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL);
// //配置證書文件位置
$key_dir = "/www/server/panel/vhost/cert/cwp.com";
$server->set(array(
'work_num'=>1,
'ssl_cert_file'=>$key_dir.'/fullchain.pem',
'ssl_key_file' =>$key_dir.'/privkey.pem'
)
);
$server->on('open', function (swoole_websocket_server $server, $request) {
echo "server: handshake success with fd{$request->fd}\n";//$request->fd 是客戶端id
});
$server->on('message', function (swoole_websocket_server $server, $frame) {
echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";
//$frame->fd 是客戶端id,$frame->data是客戶端發送的數據
//服務端向客戶端發送數據是用 $server->push( '客戶端id' , '內容')
$data = $frame->data;
foreach($server->connections as $fd){
$server->push($fd , $data);//循環廣播
}
});
$server->on('close', function ($ser, $fd) {
echo "client {$fd} closed\n";
});
$server->start();
這裏面ssl 證書只是第一次加 ,給swoole用,加完馬上在nginx裏面關掉
前端代碼
var ws_url =“wss://xx2.com/websocket”;
websocket = new WebSocket(ws_url);
前端頁面訪問xx2.com 就能握手成功 ,這裏xx2,com 不能使用https 要用http