1、创建websocket服务器对象,监听0.0.0.0:9502端口
$ws = new swoole_websocket_server("0.0.0.0", 9502);
2、监听请求连接事件
$ws->on('open', function ($ws, $request) {}
我是是用写文件的方式记录用户当前连接的句柄,以及用户标识的,减少数据库IO,不过改用redis可能会更好
文件里记录了用户基本信息,自身句柄、以及目标句柄,用做将来发送消息使用
如果连接池中用户在线状态,则向客户端推送用户登录信息
3、监听消息事件
$ws->on('message', function ($ws, $frame) {}
根据请求的json,获取来源用户标识和目标用户标识
判断是否登录状态,
获取目标用户标识的句柄
接下来就是构造数据,像目标连接发送数据
4、关闭连接事件
页面刷新,或者关闭,都会触发这个事件,不过只能拿到当前断开的句柄fd,所以根据这个标识,可以给正在与他聊天的好友,或者所有好友列表里面有该用户的发送下线通知
5、服务端运行swool服务
php /home/wwwroot/valent/index.php Websocket websocket_start > log.txt &
领取专属 10元无门槛券
私享最新 技术干货