在去年,我们公司内部实现了一个聊天室系统,实现了一个即时在线聊天室功能,可以进行群组,私聊,发图片,文字,语音等功能,那么,这个聊天室是怎么实现的呢?后端又是怎么实现的呢?...websocket服务器,并且还实现了对控制器的转发等:
https://www.easyswoole.com/Cn/Socket/webSocket.html
前后端通信协议
由于考虑到聊天室的业务逻辑复杂...websocket即时推送封包方式
在websocket中,为了区分客户端不同的操作(发送群消息,发送私聊消息等),我们定义了一个数据格式:
- op 命令
- args 额外参数
- msg 消息内容...,可以忽略xxx的数据,直接联系上下文获得op的命令类型
聊天记录存储
根据消息的类型,我们区分了 私聊消息,群消息,系统消息 3种消息,设计了3个表
为了使得客户端能够正常显示群消息,我们对群成员做了软删除处理...tcp连接进行销毁并且可能没有close事件提示,所以我们在websocket中提供了ping的命令,该命令发起后,服务器将响应pong,完成一次通信:
## ping
发送:直接给客户端发送 "ping