最近写了一个聊天室在线列表实时更新的功能,通过ajax+ThinkPHP+gatewayworker 实现聊天室在线列表无刷新实时更新功能,通过这个功能的编写,发现gatewayworker确实是一个很好的系统,即使没有node.js以及socket编程经验的我,也可以轻松实现socket实时通讯及长连接通讯的功能,这个在以前是很难想象的。
以前真的准备去学node.js了,但是因为发现了gatewayworker,就可以放弃对node.js的学习了,把精力都放在功能的开发上。
通过编写在线列表的功能,使我对gatewayworker的通讯机制更进一步加深了了解,所以在这里进行一下复盘,将数据的通讯功能再整理一下。
对于前端(客户端)与socket服务器端(gatewayworker)的通讯机制,可以概括为如下:
(1)首先,前端页面整理好要发送的数据,数据必须是json格式。
(2)前端页面将json数据,通过ws.send();函数,直接发给gatewayworker服务端。
(3)gatewayworker服务端收到数据以后,再通过 Gateway::sendToUid($temp_array,json_encode());将数据发送给客户端。或者收到客户端的数据以后,就将数据存储在redis或者mysql里。
(4)客户端收到了gatewayworker服务端发送的数据以后,就去执行前端的操作,比如更新或者显示前端页面的数据。这个操作的执行,是通过ThinkPHP的控制器或者API实现的。
以上就是客户端与服务器端数据通讯的过程。数据在客户端与服