php聊天室分房间,workerman 设计一个多房间的聊天室

阅读: 评论:0

php聊天室分房间,workerman 设计一个多房间的聊天室

php聊天室分房间,workerman 设计一个多房间的聊天室

首先下载最新版本的workerman-chat

数据流程及实现步骤:

1、客户端链接到workerman,并进行websocket握手,onConnect代码可以复用workerman-chat的onConnect。onConnect主要工作就是生成一个唯一的uid(实际上是客户端的id,不要用用户的实际uid,因为每个uid可能进入了多个房间,对应多个socket链接),并进行存储(Gateway::storeUid)绑定(Gateway::notifyConnectionSuccess)

2、客户端向服务端发送type为login的json数据,包含了所在房间号$room_id,workerman获得room_id,设置$_SESSION=$room_id,以便下次该客户端发来请求能够直接从$_SESSION获得$room_id。另外还要将该uid(实际上是客户端id)保存到$room_id对应的所有客户端id列表,以便群聊时向这些客户端id发送数据。login的数据中应该还包含用户的user_id,通过这个user_id能够从存储中获得用户名,然后可以将这个用户名也放到$_SESSION中,方便后续请求直接使用

3、当客户端发来type为群聊的消息时,我们能直接从$_SESSION中获取$room_id ,也就能通过$room_id获取所有的客户端id($clientid_array),然后调用Gateway::sendToAll($message, $clientid_array);就向$clientid_array指定的$room_id的所有客户端发送消息了

3、当客户端断开时,注意要将该客户端id从$room_id对应的客户端列表中删掉

注意:

以上重要的一点就是uid是客户端的id,全局唯一标识一个socket链接,以便区分和哪个链接通讯,和用户uid没有直接关系

$_SESSION是和socket绑定的(和用户user_id之间没有直接联系),即每个socket链接会有一个$_SESSION,里面可以存储用户的user_id、user_nick、room_id等信息,以后该socket上的请求可以直接使用$_SESSION的数据,避免了每次读取数据库的开销

多人聊天室的例子已经在计划当中,预计9月份会发出来。

本文发布于:2024-02-01 04:45:09,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170673390933954.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:聊天室   房间   php   workerman
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23