方案是我有一台运行socket(1)的服务器,又有一台服务器,其中socket(2)客户端连接到socket(1)
我有一个浏览器套接字,它连接到套接字(1)
想法是从浏览器发出请求,并从socket(2)服务器带来数据
由于所有套接字都类似于socket(1),因此不确定套接字客户端之间的区别
理想情况下,会有多个浏览器套接字和多个socket(2)客户端
浏览器套接字可以向任何socket(2)客户端发出请求
如何使用nodejs socket.io实现它
服务器
socket.on('action', (action) => {
if(action.type === 'server/hello'){
io.sockets.emit('broadcast',{ description: clients + ' clients connected!'});
console.log('Got hello data!', action.data);
}
});
浏览器客户端
var socket = io.connect('localhost:3000', {reconnect: true});
socket.on('connect', function(data) {
socket.emit('joined', 'Hello World from client this is client plxx');
});
socket.on('response2', function(data) {
console.log("got it ", data);
$('#messages').append($('<li>').text(JSON.stringify(data)));
});
服务器客户端
var io = require('socket.io-client');
var socket = io.connect('http://localhost:3000', {reconnect: true});
socket.on('broadcast', function (t) {
socket.emit("data", {data: 32})
console.log('broadcast! my host is est');
});
我应该能够在套接字客户端之间进行通信
答案 0 :(得分:0)
我从您的问题中了解到:您需要区分来自不同客户端的套接字。
要解决这个问题,我建议您仅在连接时从客户端发出套接字源。 然后在服务器上将套接字分成两个列表。
示例:
服务器
const BROWSER_CLIENTS = {};
const SERVER_CLIENTS = {};
io.on("connection", socket => {
socket.on("source", payload => {
if (payload == "browser")
BROWSER_CLIENTS[socket.id] = socket;
else if (payload == "server")
SERVER_CLIENTS[socket.id] = socket;
});
socket.on("disconnect", () => {
delete BROWSER_CLIENTS[socket.id];
delete SERVER_CLIENTS[socket.id];
});
});
浏览器客户端
socket.on("connect", () => {
socket.emit("source", "browser");
});
服务器客户端
socket.on("connect", () => {
socket.emit("source", "server");
});
现在,当您接收到一个事件时,您可以检测到它来自哪个来源。而且,如果您需要发送到一种类型的客户端的所有套接字,则只需执行以下操作:
服务器
for (let i in BROWSER_CLIENTS)
BROWSER_CLIENTS[i].emit("Hello Browsers")
for (let i in SERVER_CLIENTS)
SERVER_CLIENTS[i].emit("Hello Servers")
编辑:我找到了此链接,并认为您可以使用它。 Socket.io Rooms