У меня есть веб-сервер, работающий на ruby on rails 5 с кабелем действия, и я хочу использовать клиент libwebsockets для подключения к серверу. Я не могу заставить клиента успешно подключиться к серверу с помощью кабеля действия. Клиент libwebsockets никогда не получает обратный вызов для успешного подключения и всегда истекает. Мой сервер rails работает на nginx и тонкий на машине Ubuntu, в то время как клиент представляет собой консольное приложение C++, работающее в Visual Studio 2013. У меня включены настройки совместимости actioncable/thin, как описано в https://github.com/macournoyer/thin/issues/298. Я также использую Redis для кабеля действия.
Я пробовал регистрировать и отлаживать все, что мог придумать. Может ли кто-нибудь указать мне правильное направление для подключения клиента libwebsockets?
Подробнее:
Первоначально мой сервер rails был настроен на использование websocket-rails, и это работало с образцом клиента, представленным в официальном репозитории libwebsockets github: https://github.com/warmcat/libwebsockets/tree/master/test-server. Однако время ожидания этого же клиента истекает при попытке подключиться к серверу, работающему с активным кабелем. Я убедился, что кабель действия правильно настроен на моем сервере rails, внедрив код кабеля действия на стороне клиента javascript, и я могу успешно подключиться к серверу кабеля действия и подписаться на канал. Основываясь на ответе https://stackoverflow.com/a/36120630/3298688, мне нужно, чтобы клиент libwebsockets отправил сообщение подписки сразу после подключения, но клиент никогда не подключается, поэтому я не могу отправить это сообщение.
Мой журнал rails показывает, что сервер успешно получил запрос от клиента. Этот блок записи журнала был активирован дважды в течение одной и той же секунды, поэтому имеется неизвестный повторяющийся запрос; этого не произошло при подключении к websocket-rails. Я вижу, что сервер принимает соединение от клиента, так как появилось мое пользовательское сообщение регистратора. Это повторяется каждый раз, когда время ожидания клиента истекает, и он пытается повторно подключиться.
Started GET "/websocket" for 127.0.0.1 at 2017-03-29 11:33:51 -0700
Started GET "/websocket/" [WebSocket] for 127.0.0.1 at 3/29/2017 11:33 AM
Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket)
****** My custom logger message: ApplicationCable::Connection#connect was called!
Registered connection (Z2lkOi8vcHJvcGVydHktbWF0cml4L0xvZ2luLzk2)
Я зарегистрировал все причины обратного вызова, которые срабатывают в клиенте libwebsockets, и я никогда не вижу обратного вызова для LWS_CALLBACK_CLIENT_ESTABLISHED
. Все обратные вызовы связаны с опросом (перечисление lws_callback_reasons 29+). Я попытался отправить сообщение из этих обратных вызовов, но на самом деле данные не отправляются, вероятно, потому, что клиент еще не инициировал подключенный обратный вызов.
Когда я закрываю клиентское приложение, в журнале rails дважды появляется следующее сообщение, поэтому похоже, что у сервера rails нет проблем.
Finished "/websocket/" [WebSocket] for 127.0.0.1 at 3/29/2017 11:57 AM