# chat **Repository Path**: duwangwang/chat ## Basic Information - **Project Name**: chat - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-02-15 - **Last Updated**: 2024-06-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 1.基于tp5.0与layim的即时通讯 2.redis的使用 a:使用位图记录每个用户的登录状态,偏移量为对应用户的id,键名为status b:使用数组记录当前在线的用户,其一是用户id为键名,客户端唯一标志为键值,每个用户为数组的一项,整个数组系列化后存在键名为userid的redis中,目的是发送消息的时候根据接受方的用户id找到他的客户端标志,然后swoole服务端推送消息。其二是客户端标志键名,用户id为键值,每个用户为数组的一项,整个数组序列化后存在键名为websocket的redis中,目的是客户端主动退出,swoole服务端根据客户端标志修改该客户端的登录状态以及删除该客户端在键名为userid以及websocket的redis信息; c:聊天信息的缓存; 3.swoole服务端做的事 a:客户端连接,分配给客户端一个唯一标志 b:客户端发送消息,如果是群发,只发送给当前在线的客户端,如果是一对一的聊天,判断接收方的客户端是否在线,在线则转发给对应的客户端,不在线则存储聊天记录,对应客户端连接上线则推送给他 c:检测到客户端主动退出websocket连接,则删除对应的redis缓存(1,登录状态,2,保存的键名,3,保存的用户名) 4.客户端与服务端的通信数据格式 1.前端先生成json对象在转换为json字符串的形式将数据传递给后台,后台服务端以json_decode($data,true)将json字符串转化为数组,前端切不可将json对象传递给服务端,(服务端php swoole收不到json对象) 2.后台先生成数组,在用json_encode($data)将数组转换为json字符串给客户端;