项目要求:
- 提供用户注册、登陆、退出功能
- 用户登陆后可以进入聊天室页面
- 在聊天室页面显示所有当前登陆在线用户列表
- 如果用户退出登陆,则从在线用户列表中删除该用户
- 点击某个用户名,可以对该用户发消息
- 如果未指定消息接受对象,则表示对所有人发送消息
- 刷新聊天室信息
聊天室界面
技术分析:
1. 用户在线列表的实现
这里的在线列表并不是你的用户表数据,而是需要新建一张表,每当用户登陆之后,添加一条用户登陆信息:用户名、登陆ip、登陆时间、刷新时间(当刷新页面或者请求时,更新该时间,表示用户处于活动状态)
2. 用户退出处理
当用户退出后,将用户从在线列表删除,这里不要删除用户表数据
3. 用户直接关闭网页或者长时间未活动
由于用户并没有按照预想的方式退出,http又是一种无状态协议,所以可以运行一个用户在线检测程序,如果用户的刷新时间超过一定的时长,则认为用户下线
4.点击用户发送数据
这里需要通过js实现,可以在用户列表的每个用户名节点上使用自定义data属性上绑定用户数据,点击后获得该数据
5. 发送消息
这里选择使用ajax无刷新发送,如果用表单发送数据,就会发现体验很差,表单提交造成每次都会整个页面刷新
6. 聊天信息列表
通过ajax,每隔一段时间拉取最新的聊天信息,并显示在聊天窗口区域
这里如何保证每次拉取的是最新的聊天信息,可以使用聊天记录id,每次拉取都是从上一次的最后一条聊天记录last_id开始,也就是sql查询条件 id> last_id
拉取的信息添加到聊天列表,需要通过js控制滚动条拉到最底部
讨论区