Belli bir durumum var. Sunucu A'ya bağlanan istemcim (tarayıcı) var. Sunucu A ve B sunucularına bağlanır. İstemci sunucuya mesaj gönderdiğinde, sunucuya B veya C sunucularından biri anlamına gelen belirli bir sunucuya mesaj göndermem gerekir. Bunların her ikisi de. Genelde sunucular arasında ayrı iletişime ihtiyacım var, ancak sadece haberleşmeyi yayınladım. Tüm bağlı sunucularda A sunucusundan başka bir sunucuya mesaj görülemez.Socket.io sunucuya sunucu (belirli bir sunucuya mesaj göndererek)
İletileri doğrudan sunuculardan birine nasıl gönderebilirim? İşte sunucular için kod snippet'im. Her sunucu için portları değiştirip bağlarım.
// 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);
});
Soruyu anlamıyorum, çünkü iletiyi yalnızca istediğiniz sunucuya gönderdiğiniz kadar basit görünüyor. Eğer hem B sunucusu hem de C sunucusuna socket.io bağlantınız varsa ve gelen bir mesajın sadece B sunucusuna gönderilmesi gerekiyorsa, o zaman B sunucusuna bağlantı için soket alırsınız ve sizde 'socket.emit()' yaparsınız. sadece bu soket. Bu mesajı sadece bu bağlantıya gönderir. Sunucu A, sunucu B ve sunucu C'ye bağlantıları başlattıysa, hangi bağlantının olduğunu zaten bileceksiniz. – jfriend00
Eğer sunucu B ve C sunucusu size bağlıysa, hangisinin bağlanacağını belirlemek için onlara ihtiyacınız vardır, böylece hangisinin olduğunu takip edebilirsiniz. – jfriend00
Tavsiyeleriniz için çok teşekkürler. Çözümünüzü denedim ama 2 yuva oluşturduğumda ve socket.emit ('server_message', updated_message) gibi bir ileti gönderdiğimde; veya socket2.emit ('server_message', updated_message); Bu çalışmıyor ve socket.emit ('server_message', updated_message) gibi bir ileti göndermeye çalıştığımda, bu ileti de socket2'ye gönder. İkinci yorumda yazdığınız gibi, aynı zamanda soket kimliğine sahip iz sunucularını denedim ama aynı zamanda işe yaramadı. – mattafix19