У меня есть приложение, предназначенное только для rails API, в nginx с пассажиром.Я пытаюсь использовать Action Cable для настройки простого приложения чата во Flutter, но не могу заставить его работать правильно.
Я могу подключиться, используя следующее:
channel = IOWebSocketChannel.connect("wss://my.domain/cable")
и посмотрите следующее в моем файле production.log, когда это произойдет:
Started GET "/cable" for [redacted] at 2019-03-14 19:44:09 +0000
Started GET "/cable" [WebSocket] for [redacted] at 2019-03-14 19:44:09 +0000
Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: upgrade, HTTP_UPGRADE: websocket)
Doorkeeper::AccessToken Load (0.3ms) SELECT `oauth_access_tokens`.* FROM `oauth_access_tokens` WHERE `oauth_access_tokens`.`token` = '[redacted]' LIMIT 1
User Load (0.2ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 2 LIMIT 1
Registered connection (Z2lkOi8vYWdlbnQyNHg3L1VzZXIvMg)
Итак, соединение установлено и успешно обновлено
Затем я отправляю команду подписки
channel.sink.add(json.encode({
"command": "subscribe",
"identifier": {"channel": "ConversationChannel", "conversation_id": "${conversation.id}"}
}));
Я не уверен, должен ли я что-либо видеть в файлах журнала после выполнения этой команды, но я не вижу.Ничего не происходит, и в моем файле production.log или в журнале ошибок nginx нет никаких указаний на какие-либо ошибки.Я настроил некоторые записи в методе подписки ConversationChannel, чтобы он, по крайней мере, выводил что-то в рабочий журнал при его вызове, чтобы я мог проверить, если он хотя бы вызывает команду подписки
class ConversationChannel < ApplicationCable::Channel
def subscribed
Rails.logger.info "test conversation subscribe"
reject && return unless current_user
stream_from "conversation_#{params[:conversation_id]}_channel"
end
...
end
но это не отображается в production.log, поэтому может показаться, что команда подписки не достигает того места, куда она должна идти.
Затем я попытался использовать dart WebSocket, используя код, расположенный здесь , который пришел из разговора на github относительно состояний соединения , чтобы посмотреть, смогу ли я определить, нормально ли восстанавливается соединение.
Когда я запускаю этот код со своим доменом, я вижутакое же успешное соединение в файле production.log, но на самом деле соединение истекло с onerror TimeoutException after 0:00:15.000000: Future not completed
, что, похоже, указывает на то, что на самом деле не , в конце концов, установилось успешно, несмотря на то, что указано в файле журнала.
Что я здесь не так делаю?