Анализ данных WebSocket с Node.js - PullRequest
       19

Анализ данных WebSocket с Node.js

0 голосов
/ 11 февраля 2012

Websocket на клиенте:

socket.send('helloworld');

Websocket на Node.js:

socket.ondata = function(d, start, end){
     // I suppose that the start and end indicates the location of the 
     // actual data 'hello world' after the headers
     var data = d.toString('utf8', start, end);

     // Then I'm just printing it
     console.log(data);
});

но я получаю это: �����]���1���/�� на терминале: O

Я пытался понять этот документ: http://tools.ietf.org/html/rfc6455#section-5.2, но это трудно понять, потому что я не знаю, с чем мне следует работать, я имею в виду, что не могу видеть данные даже с toString?

Я пытался следовать и проверять ответ на эти вопросы Как я могу отправлять и получать сообщения WebSocket на стороне сервера? но я не могу заставить его работать, с этим ответом, который я получалтакой массив [false, true, false, false, true, true, false] и т. д. ... и я не знаю, что с ним делать ..: \

Так что янемного сбит с толку, что, черт возьми, мне делать после того, как я получу данные со стороны клиента, чтобы получить реальное сообщение?

Я использую оригинальный клиентский API-интерфейс и node.js без какой-либо библиотеки.

Ответы [ 3 ]

1 голос
/ 15 февраля 2012

Вы можете фактически начинать с HTTP-API Node. Именно это я и сделал, когда писал модуль WebSocket-Node https://github.com/Worlize/WebSocket-Node

Если вы не хотите использовать существующую библиотеку WebSocket (хотя на самом деле вам просто нужно использовать существующую библиотеку), вам необходимо проанализировать двоичный формат данных, определенный в RFC. Это очень ясно о формате и как именно интерпретировать данные. Из каждого кадра вы должны прочитать все флаги, интерпретировать размер кадра, возможно прочитать ключ маскирования и снять маску с содержимого, когда вы читаете их с провода.

Это одна из причин, по которой вы не видите ничего узнаваемого ... в WebSockets все связи между клиентом и сервером запутываются путем применения к содержимому случайной маски с использованием XOR в качестве меры безопасности от возможного заражения кэша старых прокси-серверы, которые не знают о веб-сокетах.

1 голос
/ 12 февраля 2012

Какую библиотеку node.js вы используете?Судя по тому, что вы перехватываете socket.ondata, который выглядит как API сервера HTTP.WebSockets не является HTTP.У него есть HTTP-совместимое рукопожатие, так что служба WebSocket и HTTP может жить на одном и том же порту, но на этом сходство заканчивается.После рукопожатия WebSockets представляет собой полнодуплексный, долговечный транспорт сообщений в рамке, более похожий на обычные сокеты TCP, чем на HTTP.

Если вы хотите реализовать свой собственный сервер WebSocket в файле node.js, вы собираетесьхотите использовать библиотеку сокетов напрямую (или использовать / заимствовать существующий код сервера WebSocket).

Вот сервер WebSocket на основе Node.js, который соединяет WebSocket с сокетами TCP: https://github.com/kanaka/websockify/blob/master/other/websockify.js Обратите внимание, чтоэто для предыдущей версии протокола Hixie (у меня еще не было возможности или мотивации для его обновления).Современная версия протокола HyBI сильно отличается, но вы можете почерпнуть некоторую полезную информацию из этой реализации.

0 голосов
/ 12 февраля 2012

Есть две вещи -

  1. Какую версию node.js вы используете?Я никогда не видел событие с данными start и endpt.Отправленное событие - это просто данные с буфером / строкой в ​​качестве аргумента.

  2. Что еще более важно, если вы подключаетесь к сокету HTTP, вы должны позаботиться о пакете HTTP.Он содержит слушатели, кузов и трейлер.Там может быть мусор.

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