2017-01-20 4 views
0

В настоящее время проблема с «Broadcast», похоже, не работает должным образом с помощью супер простой настройки веб-памяти, которую я начал в Node. Это мой первый раз, когда я работаю с веб-сайтами, поэтому мне может не хватать чего-то довольно очевидного, но после долгого поиска в Интернете я не смог найти разрешение.Node Websockets Broadcast не работает

В основном я просто пытаюсь вытащить некоторые json для всех подключенных к Интернету клиентов.

Я могу подтвердить, что этот сокет работает, потому что я могу видеть статическую строку соединения в 'ws.send' в блоке 'connection', когда я подключаюсь к ws: // localhost: 3000, а также вижу mulitple клиенты выходили из метода широковещания, если я подключаюсь к нескольким клиентам.

Любая помощь, как к тому, что я может отсутствовать было бы весьма признателен,

var WebSocketServer = require('uws').Server; 
var wss = new WebSocketServer({ port: 3000 }); // ws://localhost:3000 

// Static test var 
var test_message = { 
    'test': 'Response', 
    'test2': 'Response2' 
}; 

// Broadcast to all. 
wss.broadcast = function broadcast(data) { 
    wss.clients.forEach(function each(client) { 
    console.log('IT IS GETTING INSIDE CLIENTS'); 
    console.log(client); 

    // The data is coming in correctly 
    console.log(data); 
    client.send(data); 
    }); 
}; 

wss.on('connection', function(ws) { 
    ws.on('message', function(message) { 
    wss.broadcast(test_message); 
    console.log('Received: ' + message); 
    }); 

    // TODO This is static just to check that the connection is properly working 
    ws.send('You successfully connected to the websocket.'); 
}); 
+0

это, кажется, работает в моем случае. Можете ли вы поделиться клиентским кодом? –

+0

Прямо сейчас я просто использую расширение chrome для проверки сокета, у меня нет клиента. Расширение, которое я использую, называется «Smart Websocket Client», неспособное видеть трансляцию, нажимающую сообщение на часть ответа этого клиента. Цените помощь! – parchambeau

ответ

2

Я тестировал код с Smart Websocket Client. Ваш код в порядке. Если вы передаете данные только с string, тогда вы можете увидеть ответ в пользовательском интерфейсе, но для javascriptobject клиент не отображает, хотя вы можете видеть ответ как Binary Frames (opcode = 2) в Chrome Developer Tools.

Причина этого поведения заключается в том, что метод ws.send() поддерживает обычные строки, типизированные массивы или капли, но отправка типизированных массивов и блоков данных приведет к тому, что кадр (ы), полученный клиентом как двоичные кадры (opcode = 2).

Вы можете попробовать JSON.stringifyobject,

wss.on('connection', function(ws) { 
    ws.on('message', function(message) { 
    wss.broadcast(JSON.stringify(test_message)); 
    console.log('Received: ' + message); 
    }); 

    ws.send('You successfully connected to the websocket.'); 
}); 
+0

Ах, хорошо, что имеет смысл. Цените помощь много, имеет смысл, почему я мог видеть объект в консольном журнале, но не в пределах широковещательной передачи в пользовательском интерфейсе. – parchambeau

Смежные вопросы