Я экспериментирую с библиотекой 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 или есть способ заставить эти две библиотеки успешно работать?