聊天室模型如下图所示
当用户按下回车键,自动请求后台接口
同样在我们的index/chart/index方法中将用户的聊天内容推送给客户端
这里客户端接收内容,渲染到前端页面中
通过上面我们不难发现聊天室的原理和我们之前所做的图文直播没有太大的区别。不过之前我们所做的图文直播是调用服务器的8811端口,而我们的聊天室假如也调用8811的话,那么不单单是双方发布的信息会产生混淆,就连推送的用户也会混淆
针对这种情况我们有两种解决措施:
1 每个端口上再加一个参数进行区分
例如:http://112.74.161.233:8811/?s=index/chart/index&type=chart
这样我们可以通过websocket中的onOpen,onClose 方法中的request来获取type值,通过type值区分不同的用户和内容
2 一个wedsocket服务器开启两个端口,8811为图文直播,8812为聊天室
于是,明哥就在客户端上的js文件中又请求了 8812端口
当用户点击回车键发送消息时。客户端报错信息如下图所示 8811端口成功连接,8812端口则连接失败
那么回到我们wedsocket服务的代码,仔细观察发现我们仅开启了8811端口。8812端口则未开启。我们当然可以继续新建一个wedsocket服务文件,重新开启新8812端口,不过显然这并不是一个好的解决办法。通过查看官方文档,我们可采用监听新端口的方式来获取8812端口
修改wedsocket服务代码如下
再次打开客户端。发现客户端同时连接两个端口成功
然后我们将聊天内容push给所有连接到8812客户端的用户上。。
这里注意我们的ports[1],打印一下$_POST可见
ports[0]是我们的8811端口,ports[1]是我们的8812端口。其中的connection是所有客户端id的集合
客户端上接收到服务器发送的值