Веб-сокеты: совместимы ли Rachet и autobahn из npm?

Я экспериментирую с библиотекой Ratchet php. В частности, я пытался интегрировать их демонстрацию push интеграции в приложение React.

Их демо-версия ссылается на на первый взгляд единственную версию библиотеки autobahnbahn.js a>, который работает против реализации моего сервера (почти дубликат их демонстрации).

Однако, когда я пытаюсь использовать autobahn JS из npm, все тает. Кажется, это реализует более новую версию протокола веб-сокетов?

Одноразовая версия автобана передает wamp для заголовка Sec-WebSocket-Protocol, который Ratchet, похоже, поддерживает. Версия автобана npm проходит wamp.2.json, wamp.2.msgpack...

Копаясь в коде Ratchet, я нашел это

Если какой-либо компонент в стеке поддерживает подпротокол WebSocket, возвращайте каждый поддерживаемый в массиве

Поэтому я реализовал Ratchet\WebSocket\WsServerInterface как таковой в своем компоненте.

public function getSubProtocols()
{
    return ['wamp.2.json', 'wamp.2.msgpack'];
}

Теперь попытка подключения продвигается немного дальше, но все равно взрывается

сбой транспорта из-за нарушения протокола: неожиданный тип сообщения 0

Затем клиент не может закрыть соединение

Uncaught DOMException: не удалось выполнить «закрыть» на «WebSocket»: код должен быть либо 1000, либо между 3000 и 4999. 1002 не является ни тем, ни другим.

Что тут происходит; поддерживает ли Ratchet более старую версию протокола Web Socket или есть способ заставить эти две библиотеки успешно работать?


person quickshiftin    schedule 16.02.2018    source источник


Ответы (1)


Две библиотеки несовместимы согласно этой проблеме на GitHub.

Autobahn 0.9+ реализует wampv2, мы должны использовать autobahn 0.8, и я также не нахожу его на npm. Вместо этого я нахожу wamp1, но еще не тестировал его.

person quickshiftin    schedule 16.02.2018