通过在php网站上的socket.io的通知
我正在PHP中构build一个网站,以JSON格式处理Redis中的会话。
通过这种方式,可以通过PHP解释器和node.js服务器访问会话。
我想要做的是现在在网站上添加通知; 我想到的程序如下:(只是把它简单地作为简单的朋友请求来简化它)
- 用户A发送好友请求。
- PHP使用cURL向node.js服务发送通知
- 用户B得到一个通知,因为他通过socket.io连接到node.js
什么是实现这一目标的一般准则? 因为看起来很清楚,如果用户A和用户B在不同的服务器上,水平伸缩是不可能的。
提前致谢。
听起来像你可以在这里使用Web套接字与发布/订阅协议,体系结构。
您可以使用Web套接字获得服务器客户端function。 节点是一个websocket服务器,很多小IO的完美select。 请参阅http://en.wikipedia.org/wiki/Web_sockets
我不会想如果共享会话是需要的PHP节点通信,只是让你的客户端通过套接字推送请求,并根据需要处理的回报。
我认为你提出的方法听起来很合理。 但是,可以考虑使用消息队列(zeromq,rabbitmq,其他),而不是直接请求服务,这样可以更轻松地对其进行扩展,因为您可以轻松地将逻辑添加到队列处理以将消息传递给正确的节点实例。
我设法在便宜的VPS上用socket.io获得了1400个并发连接,没有特别的configuration,所以即使没有任何技巧,它也能够很好地扩展。 在我的情况下,这些连接大部分也是几乎不断地发送和接收数据。 它可能已经处理了不止于此,1400'ish只是我碰巧得到的最大用户数。
虽然我更担心让所有的用户首先;)
使用Redis内置的pub-subfunction。 当PHP服务器获得请求时,它将其发布到为此设置的通道。 每个节点服务器订阅该通道并检查涉及的用户是否连接到该通道。 如果是这样,它通过socket.io发送通知。 作为奖励,你避免了一个额外的networking连接,你的整体逻辑被简化了。
简单地根据需要设置你的数据库,然后每当一个活动,只是告诉你的节点js通过redis的相关信息转移到PHP,并作出一个过程,并作出回应从PHP到节点通过通道不断检查通知从表和显示