后台搭建websocket需要一台服务器、需要服务器里配置swoole扩展:
定义:开放端口:9503 ,如果是阿里云服务器需要在安全里也开放9503端口;
swoole尽量安装最新版,这里我安装的4.3.3版本,支持的方法会更强劲
swoole文档:https://wiki.swoole.com/
下面是代码:
//创建websocket服务器
$server = new \swoole_websocket_server("0.0.0.0", 9503);
//监听WebSocket连接打开事件
$server->on('open', function ($server, $request) use($output) {
$this->onOpen($server, $request, $output);
});
//监听WebSocket消息事件
$server->on('message', function ($server, $frame) use($output) {
$this->onMessage($server, $frame, $output);
});
//监听WebSocket关闭消息事件
$server->on('close', function ($server, $fd) {
$this->onClose($server, $fd);
});
$server->start();
开启后进行监听方法的处理:
/**
* 监听打开webSocket,进行相应处理
* @param $server
* @param $request
* @param $output
*/
private function onOpen($server, $request, $output){
}
/**
* 监听打开webSocket,获取当前用户连接
* @param $server 当前服务
* @param $frame 连接参数、前端发送的消息都会在这里面
* @param $output
*/
private function onMessage($server, $frame, $output){
$data = json_decode($frame->data,true);//获取当前前端发送数据
$fd = $frame->fd;//当前客户端连接的标识;
$server->connections;这个方法是获取当前所有连接服务器的客户端;这个是一个二维所以需要循环进行获取
$server->isEstablished($fd);这个方法是判断当前这个客户端是否连接正常,如果连接已经断开我们需要进行处理;
}
/**
* 监听关闭webSocket
* @param $server
* @param $request
* @param $redis
*/
public function onClose($server, $fd)
{
//只有客户端主动断开连接后,我们才能触发此方法;我感觉很鸡肋,客户端再次连接就是新的连接标识;所以需要一些方法进行处理
}
如果需要实时的推送一些消息方法;但是我们希望的是一直监听着是否有推送的:
//循环进行发送消息
$process = new \swoole_process(function($process) use ($server) {
$this->WebSocketRpushList($server);
});
$server->addProcess($process);//添加一个自定义的工作进程
在:$server->start() ;之前需要加入上面4个行代码;
处理逻辑和发送方法需要根据自己业务需求进行编写;
代码处理好后;我们在连接的时候可能在连接的时候不想把端口号写到前端:
可以用nginx反向代理;
以上就是一些简单的操作;进行连接了