【问题标题】:How to connect multiple socket clients nodejs如何连接多个套接字客户端nodejs
【发布时间】:2019-11-19 18:30:49
【问题描述】:

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

我有一个连接到 socket(1) 的浏览器套接字

想法是从浏览器发出请求并从套接字(2)服务器获取数据

不确定如何区分套接字客户端,因为所有套接字都类似于 socket(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');
});

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

【问题讨论】:

  • 您问题的前几行有点令人困惑。只是为了你自己的利益的提示。让你的问题简洁明了。

标签: node.js sockets websocket socket.io


【解决方案1】:

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

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

例子:

服务器

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

【讨论】:

    猜你喜欢
    • 2011-03-22
    • 2017-02-17
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 2015-06-13
    • 2014-04-06
    • 2018-07-05
    • 1970-01-01
    相关资源
    最近更新 更多