GatewayWorker 有以下特性(更多请参考官网手册)php
咱们主要使用它的WebSocket通信协议,而且此框架很是方便的与 ThinkPHP,laravel 等框架结合使用,GatewayWorker可独立部署,php负责相关的业务逻辑
即时通信中,最重要的是响应速度,咱们须要展现 “消息列表” 那么这时会有 未读消息,未读数量,最后一条消息内容,时间等等。
群聊|私聊效果图laravel
消息列表效果图web
参数名 | 说明 |
---|---|
id | 主键 |
sender_id | 发送者id |
receive_id | 接收者id |
chat_identify | 标识 :a与b聊天,b与a聊天。记录 a-b |
message_details | 消息内容 |
last_time_at | 聊天时间间隔 超过必定时间时记录 |
每一个用户的列表都是一个集合 key = message_list:user_id
Redis集合存储 消息类型 1私信,2群聊 message_list:user_id{ json_encode(['消息类型','接收者id|群组id']), json_encode(['消息类型','接收者id|群组id']), json_encode(['消息类型','接收者id|群组id']), } 查找每一个人的消息列表,直接取出该列表便可,但每一个成员 都要对应 ‘未读消息数量’,‘最后一条消息内容’,‘最后一条小时时间’。因为是可变的,因此须要单独存储 Redis 键值 key = message_content:user_id_消息类型_id key =>json_encode(['消息数量','最后一条消息内容','时间']) 上面 集合列表里的每个成员都 对应这里的每一个键值。
私聊|群聊 记录表。目前设计是单表单库。显然,随着用户量增长,必然爆棚。影响查询的响应速度。redis