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月份会发出来。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值