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, но я еще не проверял это.

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