我有一个特定的情况。我有连接到服务器A的客户端(浏览器)。服务器A连接到服务器B和C.当客户端向服务器A发送消息时,我需要将消息发送到特定服务器,这意味着服务器B或C之一,而不是两个都。一般来说,我需要在服务器之间进行分离通信,但我只能广播通信。从服务器A到另一台服务器的消息不能在所有连接的服务器上看到。Socket.io服务器到服务器(发送消息到特定服务器)
如何将消息直接发送到其中一台服务器?这是我的服务器代码片段。我只是更改每个服务器的端口并连接它们。
// Load requirements
var PORT = process.env.PORT || 8080;//just change port for other servers
var express = require("express");
var app = express();
var http = require("http").Server(app);
var io = require("socket.io")(http);
app.use(express.static(__dirname + '/public'));
var client = require('socket.io-client');
var socket1 = client.connect('http://localhost:8081', { reconnect: true });//connection to server B
var socket2 = client.connect('http://localhost:8082', { reconnect: true });//connection to server C
// Add a connect listener
io.on('connection', function (socket) {
console.log('Client connected.');
//when server receive message from client
socket.on('message_from_browser', function (message) {
console.log("Message from browser broadcasted: " + message.text);
var updated_message = {
text: message.text,
port: PORT
};
// send message to server B
socket1.emit('server_message', updated_message);//send message to server B
});
// Disconnect listener
socket.on('disconnect', function() {
console.log('Client disconnected.');
});
});
socket1.on('connect', function() {
socket1.on('server_message', function (message) {
console.log('RECEIVED MESSAGE FROM ANOTHER SERVER ON PORT '+ message.port + ": " + message.text);
});
//change server name
console.log('Connected to server B!');
});
socket2.on('connect', function() {
socket2.on('server_message', function (message) {
console.log('RECEIVED MESSAGE FROM ANOTHER SERVER ON PORT '+ message.port + ": " + message.text);
});
//change server name
console.log('Connected to server C!');
});
http.listen(PORT, function (req, res) {
console.log("Server Started on port: " + PORT);
});
我也许不明白这个问题,因为答案看起来很简单,因为您只将消息发送到所需的服务器。如果你有socket.io连接到服务器B和服务器C,并且一个传入消息应该只发送给服务器B,那么你得到了连接到服务器B的套接字,并且你执行'socket.emit()'只有那个插座。这将只将消息发送到该连接。如果服务器A启动了到服务器B和服务器C的连接,那么您已经知道哪个连接是哪个连接。 – jfriend00
如果服务器B和服务器C连接到您,那么您需要他们确定他们连接时哪一个,以便您可以跟踪哪个是哪个。 – jfriend00
非常感谢您的建议。我已经尝试过你的解决方案,但是当我创建2个套接字,然后,当我发送消息,如socket.emit('server_message',updated_message);或者socket2.emit('server_message',updated_message);这不起作用,当我试图发送像socket.emit('server_message',updated_message)这样的消息时,这个消息也发送到socket2。当你在第二条评论中输入时,我也尝试过使用套接字标识跟踪服务器,但它也不起作用。 – mattafix19