2

我正在用 PHP 构建一个网站,以 JSON 格式处理 Redis 中的会话。

这样,PHP 解释器和 node.js 服务器都可以访问会话。

我现在要做的是在所述网站中添加通知;我正在考虑的过程如下:(将其视为一个简单的朋友请求以简化这一切)

  1. 用户 A 发送好友请求。
  2. PHP 使用 cURL 向 node.js 服务发送通知
  3. 用户 B 收到通知,因为他通过 socket.io 连接到 node.js

实现这一目标的一般准则是什么?因为我很清楚,如果用户 A 和 B 在不同的服务器上,就不可能水平扩展;

提前致谢。

4

4 回答 4

1

听起来您可以在这里通过发布/订阅协议架构来使用 Web 套接字。

您可以通过 Web 套接字获得服务器客户端功能。Node 是 websocket 服务器的完美选择,大量的小 IO。见http://en.wikipedia.org/wiki/Web_sockets

我不认为 php - 节点通信是否需要共享会话,只需让您的客户端通过套接字推送请求并根据需要处理请求。

于 2012-10-14T13:50:14.667 回答
0

我认为您提出的方法听起来很合理。但是,您可以考虑使用消息队列(zeromq、rabbitmq 等),而不是直接请求服务,这样您就可以更轻松地对其进行扩展,因为您可以轻松地将逻辑添加到队列处理以将消息传递到正确的节点实例。

我设法在没有特殊配置的廉价 VPS 上获得了 1400 个与 socket.io 的并发连接,因此即使没有任何技巧,它也应该可以很好地扩展。就我而言,这些连接中的大多数也几乎不断地发送和接收数据。它可能处理的不止这些,1400'ish 只是我碰巧获得的最大用户数。

虽然我更担心首先获得所有这些用户;)

于 2012-10-14T13:56:41.167 回答
0

使用 Redis 内置的 pub-sub 功能。当 PHP 服务器收到请求时,它会将请求发布到为此目的而设置的通道。您的每个节点服务器都订阅该频道并检查所涉及的用户是否已连接到该频道。如果是这样,它会通过 socket.io 发送通知。作为奖励,您避免了额外的网络连接,并且简化了整体逻辑。

于 2012-10-14T22:48:18.523 回答
0

只需根据需要设置您的数据库,然后每当进行活动时,只需告诉您的节点 js 通过 redis 将相关信息传输到 php 并进行处理,并通过通道从 php 向节点做出响应,继续检查表中的通知和节目

于 2015-08-25T17:40:52.090 回答