提问者:小点点

如何连接多个套接字客户端节点


场景是:我有一个服务器,其中socket(1)运行,我还有一个服务器,其中socket(2)客户端连接到socket(1)

我有一个浏览器套接字,它连接到套接字(1)

思想是做来自浏览器的请求,并从socket(2)服务器带来数据

不确定套接字客户端之间的区别,因为所有套接字都类似于套接字(%1)

理想情况下,将有多个浏览器套接字和多个套接字(2)客户端

浏览器套接字可以向任何套接字(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');
});

我应该能够在套接字客户端之间通信


共1个答案

匿名用户

我从您的问题中了解到的是:您需要区分来自不同客户端的套接字。

为了解决这个问题,我建议只需在Connect上从客户端发出套接字源。并在服务器上将套接字分成两个列表。

示例:

服务器

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室