如何连接多个套接字客户端nodejs

时间:2019-07-10 07:25:42

标签: node.js sockets websocket socket.io

方案是我有一台运行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');
});

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

1 个答案:

答案 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