Websockets: совместимы ли Rachet & autobahn от npm?
Я экспериментирую с библиотекой Ratchet php. В частности, я пытался интегрировать их демонстрацию push-интеграции в приложение React.
Их демо-версия ссылается на однозначную версию библиотеки JS 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: Не удалось выполнить 'close' в 'WebSocket': код должен быть либо 1000, либо между 3000 и 4999. 1002 - это ни то, ни другое.
Что тут происходит; Ratchet поддерживает более старую версию протокола Web Socket, или есть способ заставить эти две библиотеки говорить успешно?
1 ответ
Эти две библиотеки несовместимы, согласно этой проблеме на GitHub.
Autobahn 0.9+ реализует wampv2, мы должны использовать autobahn 0.8, и я также не нахожу его на npm. Вместо этого я нахожу wamp1, но я еще не проверял это.