我有一個特定的情況。我有連接到服務器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