Клиенты веб-сокетов и Flash-сокетов подключаются к одному Node.js

У меня проблема с подключением Flash-клиента к серверу Node.js.

Короткая история:

Впервые я создаю сервер Node.js, который должен использоваться как веб-клиентом (WebSocket), так и Flash-клиентом (Socket). Веб-клиент, конечно, работает как шарм, но я не могу перебить Flash. Я получаю SECURITY_ERROR. После дня исследования я думаю, что это из-за файла политики не загружается. Идеи (примус поверх engine.io)?

Длинная история:

Я использую Primus, так как я думал, что он мне понадобится, потому что у меня есть как веб-сокеты, так и флеш-сокеты. Не уверен, что это точно?:)

Я использую Engine.io как "трансформер / транспортер" - основной фреймворк, который использует слой. Я не буду обсуждать стандартный веб-клиент (с использованием Chrome и primus-client), поскольку его легко настроить.

Я использую простые и стандартные сокеты в AS3:

_socket = new Socket();
_socket.addEventListener(Event.CONNECT, onSocketConnect);
//...
_socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
_socket.addEventListener(IOErrorEvent.IO_ERROR, onIOError);

_socket.connect('localhost', '1337);

При его создании в Flash IDE он переходит к onSocketConnect функция, но если я пытаюсь что-то записать в носок - я отключаюсь. Если я запускаю это из веб-браузера, я попадаю в onSecurityError метод.

Я должен сказать, что я не получаю никаких следов в консоли узла!

primus.on('connection', function connection(spark) {
  console.log('new connection'); // never gets logged!

Как я знаю, ошибка безопасности возникает при возникновении ошибки в файле политики, поэтому я начал искать решение для этого.

Я много чего читал в Интернете, и самым распространенным решением было простое использование socket.io и так называемый FlashSocket.IO, Я пытался реализовать его, но он настолько стар, что некоторый код отсутствует, и я наконец-то получил некоторые ошибки от hurlant библиотека - я не мог заставить это работать.

Я также видел некоторый пакет узла под названием policy, который запускает отдельный сервер для сервера файла политики.

Я пытался добавить transport массив с flashsocket в нем - без изменений. Я также не могу понять, почему все образцы используют transports - Я искал и оба index.js а также primus.js используют transport (почему есть два отдельных файла, Иисус?!)

Я мог бы попытаться использовать только engine.io без primus, но я не знаю, поможет ли это. Все посты и примеры, которые я нашел, довольно старые - пожалуйста, помогите мне с любым современным решением или хотя бы каким-нибудь объяснением, что нужно сделать - мне кажется, что это целая новая вселенная:)

Заранее спасибо!

Изменить: Благодаря The_asMan, я понял, что это как-то связано с рукопожатием. Я попробовал этот простой пример (несмотря на то, что он такой старый) - он отлично работал для клиента Flash! Конечно, я не могу подключить к нему веб-сокеты, так как рукопожатие не является правильным - у него есть какой-то протокол для него.

Так что, думаю, мне просто нужно понять, как получить <policy-file-request/> в узле - я смогу вернуть файл политики. Но я не знаю, как это получить - я не получаю никаких data ни connect Обработчик...

2 ответа

Просто идея: в некоторых операционных системах flush() вызывается автоматически между кадрами выполнения, но в других операционных системах, таких как Windows, данные никогда не отправляются, если вы явно не вызовете flush(). Чтобы обеспечить надежную работу вашего приложения во всех операционных системах, рекомендуется вызывать метод flush() после записи каждого сообщения (или связанной группы данных) в сокет.

У вас проблема с междоменной политикой.

Я ответил на все это здесь.

AS3 - связь через разъем Flash/AIR writeUTFBytes работает только один раз

Другие вопросы по тегам