基础介绍
(1) Swoole是一款面向生产环境的PHP异步网络通信引擎,可用于开发高性能的异步并发TCP、UDP、Unix Socket、HTTP和WebSocket服务。Swoole在互联网、移动通信、企业软件、云计算、网络游戏、物联网(IOT)、车联网和智能家居等领域得到广泛应用。使用PHP + Swoole作为网络通信框架可以极大提升企业IT研发团队的效率。
(2) WebSocket是一种通过单个TCP连接进行全双工通信的协议。它于2011年由IETF定为标准RFC 6455,并由RFC7936进行补充规范。同时,WebSocket API也被W3C定为标准。
借助WebSocket,客户端和服务器之间的数据交换更加简便,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需进行一次握手,便可建立持久性连接并进行双向数据传输。
(3) 本文将介绍如何利用Swoole和WebSocket实现一个简易的聊天室。对于熟悉网络通信协议的读者来说,这不会是一个陌生的话题。
功能需求及问题处理
web端:
(1) 每次刷新都会生成一个唯一的ID(id值从1开始).
(2) 第一次进入网站时会要求用户设置昵称并会与ID进行绑定。
问题点:
(1) 刷新页面后用户标志(ID)会重新生成,之前生成ID被弃用。
(2) WebSocket生成了新的用户ID,但是跟现在的无法形成关联关系。
server端:
(1) 当用户进入聊天室后,发送广播给所有人并加入聊天群组(使用redis存储)。
(2) 当用户退出直播间后,发送广播给所有人并清除该用户的记录。
(3) 用户每发送一次消息都要形成新的记录广播给所有人。
(4) 用户生成新的昵称后把昵称推送给他。
web端问题处理方法:
(1) 浏览器刷新时提醒用户刷新即将重新获得新的身份。
(2) 用户连接成功后记录用户name,每次连接把这个name带上,清除之前该name的绑定关系,形成新的关系。
聊天室演示
代码实现
总结
这篇文章只是简单的介绍前后端如何实现通信,很多的细节问题没有进行处理。 UI比较low,这里大家只看代码就好了…