【问题标题】:How do I send message to another socket.io server using socket.io-redis?如何使用 socket.io-redis 将消息发送到另一个 socket.io 服务器?
【发布时间】:2015-07-09 19:39:06
【问题描述】:

我需要两个不同的 socket.io 服务器相互通信。我不能使用socket.io-client,因为它不区分browser to server 连接和server to server 连接。所以我尝试使用socket.io-redis

一个是 express-socket.io 服务器,另一个是独立的 socket.io 服务器。两者都已配置为使用socket.io-redis 适配器。我没有看到从 Server2 在 Server1 收到的消息。也没有错误。

服务器 1:

var express = require('express');
var app = express();

var server = app.listen(8000,function () {
	console.log('server listening at port 8000');
});

var io = require('socket.io')(server);
var redis = require('socket.io-redis');
io.adapter(redis({ host: 'localhost', port: 6379 }));

io.on('message',function (message) {
	console.log(message);
});

io.on('connection',function (socket) {
	console.log('connection');
	socket.on('message',function (message) {
		console.log(message);
	});
});

服务器2:

var io = require('socket.io')(3000);
var redis = require('socket.io-redis');
io.adapter(redis({ host: 'localhost', port: 6379 }));

io.emit('message','Hi');

【问题讨论】:

  • 如果事件写入正确,您是否检查了redis存储?
  • @cdagli 你能看看stackoverflow.com/questions/36874287/… 我从你的用户描述中看到你有一些socket.io的经验:)。 Koval 是否在右下方,我无法使用 socket.io-redis 与服务器通信?

标签: node.js websocket socket.io socket.io-redis


【解决方案1】:

socket.io-redis 将不允许您在另一台服务器上捕获来自一台服务器的事件。它的工作原理是将一台服务器发出的消息简单地“推送”到其他连接的服务器,以便这些服务器可以将这些消息发送到。

如果实例 A 将收到一个事件(即io.on('connect')),您将无法在实例 B 上捕获该事件。但是,您将能够向连接到所有实例的所有客户端发送消息,只需通过打电话

socket.on('message', function(socket){
   socket.emit('hello', 'New message');
}

这样,您将向所有客户端广播消息,无论是连接到实例 A 还是 B(包括您自己)。这种方法允许您将您的应用程序扩展到一台机器上的其他实例(使用多个线程)或其他服务器。

如果您需要您的服务器相互“对话”,您可以利用您现有的传输层 - Express 服务器。您可以为不同类型的请求创建处理程序,例如:

app.get('/api/clientCount', function(req, res){
  res.send(io.engine.clientsCount);
});

这种方式你可以在socket.io实例之间交换信息,改变它们的状态,让所有实例报告使用情况,等等。要记住的事情——验证请求;你不想接到未经授权的用户的电话:)

【讨论】:

    猜你喜欢
    • 2019-01-21
    • 2013-06-30
    • 1970-01-01
    • 2014-03-16
    • 2015-12-17
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多