Ich habe eine bestimmte Situation. Ich habe Client (Browser), der eine Verbindung zu Server A herstellt. Server A ist mit Server B und C verbunden. Wenn Client eine Nachricht an Server A sendet, muss ich eine Nachricht an einen bestimmten Server senden, dh an einen der Server B oder C beide. Im Allgemeinen brauche ich getrennte Kommunikation zwischen Servern, aber ich habe nur Kommunikation übertragen. Die Nachricht von Server A an einen anderen Server kann nicht auf allen verbundenen Servern angezeigt werden.Socket.io Server zu Server (Senden von Nachrichten an bestimmte Server)
Wie kann ich Nachrichten direkt an einen der Server senden? Hier ist mein Code-Snippet für Server. Ich ändere nur die Ports für jeden Server und verbinde sie.
// 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);
});
Ich verstehe vielleicht die Frage nicht, weil die Antwort so einfach scheint, wie Sie die Nachricht nur an den gewünschten Server senden. Wenn Sie socket.io-Verbindungen sowohl zu Server B als auch zu Server C haben und eine eingehende Nachricht nur an Server B gesendet werden soll, dann erhalten Sie den Socket für die Verbindung zu Server B und Sie tun 'socket.emit()' on nur diese Steckdose. Dadurch wird die Nachricht nur an diese Verbindung gesendet. Wenn Server A die Verbindungen zu Server B und Server C initiiert hat, wissen Sie bereits, welche Verbindung welche ist. – jfriend00
Wenn Server B und Server C mit Ihnen verbunden sind, benötigen Sie sie, um zu identifizieren, welche sie sind, wenn sie eine Verbindung herstellen, damit Sie verfolgen können, welche welche ist. – jfriend00
Vielen Dank für Ihre Ratschläge. Ich habe deine Lösung versucht, aber wenn ich 2 Sockets erstellen und dann, wenn ich eine Nachricht wie socket.emit senden ('server_message', updated_message); oder socket2.emit ('server_message', aktualisierte_nachricht); das funktioniert nicht und als ich versuchte, eine Nachricht wie socket.emit ('server_message', updated_message); zu senden, sendete diese Nachricht auch an socket2. Als Sie den zweiten Kommentar eingegeben haben, habe ich auch Track-Server mit Socket-ID ausprobiert, aber es hat auch nicht funktioniert. – mattafix19