Как подключить несколько клиентов сокетов nodejs - PullRequest
0 голосов
/ 10 июля 2019

Сценарий: у меня есть сервер, на котором работает 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 Ответ

0 голосов
/ 14 июля 2019

Что я понял из вашего вопроса: вам нужно различать сокеты от разных клиентов.

Чтобы решить эту проблему, я бы предложил просто отправлять источник сокета от клиента при подключении. А на сервере разделите сокеты на два списка.

Пример:

Сервер

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...