使用Redis商店扩展Engine.IO(与Socket.IO对比)

时间:2013-08-07 20:45:07

标签: node.js socket.io

关于这个主题有几个问题,但没有一个问题可以解决这个问题。

我正在使用带有redis-store的Socket.IO,而我正在为流量增加做准备。我的托管公司说,“你需要使用Engine.IO而不是Socket.IO,因为它的效率更高”,所以我很想弄明白这意味着什么。

Questions like this似乎有相互矛盾的答案:

所以我看待它的方式:

  • Socket.IO 0.9降级
  • Engine.IO增强
  • Socket.IO 1.0将使用Engine.IO
  • 如果要在多个实例上运行Engine.IO,则必须自己编写redis商店

但是后来Engine.IO说它是“负载平衡器友好”,但对redis没有任何说明。它必须有某种外店,对吧?但是如果它有多个传输和存储,那么Socket.IO有什么意义呢?

然后我看到Socket.IO might be abandonedhigh profile companies are movingPrimus

如何扩展Engine.IO?我是否必须自己编写商店?

3 个答案:

答案 0 :(得分:10)

只是想分享我上周学到的东西,但希望其他人出现并明确回答这个问题,以便我给他们一张支票。

1)切勿使用Socket.IO(截至0.9.16)

我的主人告诉我使用Engine.IO(或其他任何东西)是对的。 Socket.IO有很多重大问题,其中最糟糕的是意外DDoS your server。我亲身体验过这个客户端相对较少,它完全禁用了我的服务器,直到我可以重写Socket.IO。我缩放到25+无人机以吸收这一击,这无所谓。单个客户端每秒可以发送1000个请求。

2)其他引擎没有Redis商店

Socket.IO允许您通过放入Redis商店来跨节点进行广播。据我所知,Engine.IO,Primus和SockJS不提供此功能。因此,当这些引擎声称“负载均衡器”友好时,并不意味着您可以跨节点进行广播。我开始认为这实际上是一件好事。使用redis编写pub / sub相对容易,并且将其分离出来非常好。

我最终使用Primus Engine.IO,然后使用redis pub / sub在节点之间共享事件。我花了大约5个小时来删除Socket.IO,连接Primus,写下pub / sub,然后上线。到目前为止,这是一次更好的体验。

<强>更新

结束Engine.IO也会进入重新连接循环(每秒几次),所以我最终使用了SockJS。它给了我最好的连接性和安全性。稳定性,Primus now handles the reconnect(SockJS不这样做)。

答案 1 :(得分:1)

我同意在发布v1.0之前应该避免使用Socket.IO,这是错误的,在我的测试中,Engine.IO的表现更好(https://medium.com/node-js-javascript/b63bfca0539)。 Primus绝对是一个不错的选择:也许你现在会使用Engine.IO但是当你发布Socket.IO 1.0时你会想要切换到它。

我用Engine.IO和Redis以及Pub / Sub结构实现了一个类似的程序,它看起来非常优雅。以下代码将连接的客户端订阅到房间/频道。

io.on('connection', function (socket) {
  var observerRedisClient = redis.createClient();
  observerRedisClient.subscribe(resourceId, redis.print);

  observerRedisClient.on('message', function(channel, message) {
      socket.send(message);
  });
});

如果您更新该频道,即。保存一些数据并发布,然后所有订阅的客户端都会收到它。

redisClient.set(key, value, redis.print);
redisClient.publish(key, value);

如果您感兴趣,代码是开源的:https://github.com/denizozger/node-engine.io-server

答案 2 :(得分:-1)

好吧,正如你提到的那样,我应该看看Primus。使用HAProxy实现缩放。 作为底层通信,您仍然可以使用Socket.io,还可以使用engine.io。通过使用Primus,您可以尝试使用不同的库。 有一篇关于在http://pusher.com/docs/server_libraries缩放Redis的有趣文章。