Как отправить на websocket сообщение из node js?

546
24 ноября 2016, 10:32

В моем приложении node js понадобилась отправка сообщений на websocket. Я решил что надо написать клиента websocket серверу. Вот пример:

 var WebSocketClient = require('websocket').client;
var client = new WebSocketClient();
client.on('connectFailed', function(error) {
    console.log('Connect Error: ' + error.toString());
});
client.on('connect', function(connection) {
    console.log('WebSocket Client Connected');
    connection.on('error', function(error) {
        console.log("Connection Error: " + error.toString());
    });
    connection.on('close', function() {
        console.log('echo-protocol Connection Closed');
    });
    connection.on('message', function(message) {
        if (message.type === 'utf8') {
            console.log("Received: '" + message.utf8Data + "'");
        }
    });
});
client.connect('ws://192.168.0.180:8080/', 'echo-protocol');

Как отправить сообщение из обработчика события, где уже произошел connect, это понятно, в данном случае connection.sendUTF например. А как отправить сообщение не через обработчик события я не понимаю. Пробовал client.sendUTF, client.send и тп - все без толку... При запуске пишет что не найдена функция. Пробовал вручную найти метод, не нашел, в документации тоже нету. Как отправить сообщение не из обработчика события connect?

Answer 1

Проблема у Вас в том что client и connection разные объекты(разных "классов"). Для решения вашей задачи надо как-то сохранить переменную соединения

var WebSocketClient = require('websocket').client;
var client = new WebSocketClient();
var _connection = null;
client.on('connectFailed', function(error) {
   console.log('Connect Error: ' + error.toString());
});
client.on('connect', function(connection) {
    console.log('WebSocket Client Connected');
    connection.on('error', function(error) {
        console.log("Connection Error: " + error.toString());
        _connection = null;
    });
    connection.on('close', function() {
        console.log('echo-protocol Connection Closed');
        _connection = null;
    });
    connection.on('message', function(message) {
        if (message.type === 'utf8') {
            console.log("Received: '" + message.utf8Data + "'");
        }
    });
});
function Send(data){
  if (_connection === null){
      throw 'Not connect';
  }
  _connection.send(data); //не ведаю какое у вас апи подставьте свой метод
}
client.connect('ws://192.168.0.180:8080/', 'echo-protocol');

Тут есть одна проблема вам в любом случае нужно каким-либо способом дожидаться события соединения что-бы корректно начать обмен. Можно написать какой-то контроллер и биндить его.

READ ALSO
При нажатии на кнопку открываются все модальные окна сразу (

При нажатии на кнопку открываются все модальные окна сразу (

Вот код, генерируем строки, в строках по 4 ячейки в последней ячейке кнопка с с вызовом модального окна, вот когда на нее нажимаешь открываются...

557
React - биндинг и ключи

React - биндинг и ключи

Есть два терзающий вопроса:

533
строки DOM таблицы

строки DOM таблицы

Есть вот такой скрипт, по нажатию кнопки, создает строку таблицы, возможно ли сделать чтобы генерируемый имел ввид к примеруСуть в том чтоя...

431
Не срабатывает оператор else. (Javascript)

Не срабатывает оператор else. (Javascript)

При выполнении лабораторной работы возникла вот такая проблемаПервое поле задаёт нижнюю границу диапазона чисел, а второе - верхнюю

375