У меня есть приложение сервера Elixir/Phoenix, и клиенты подключаются через систему сборки в каналах через websockets. Теперь я хочу определить, когда пользователь покидает канал.Как определить, покинул ли пользователь канал Phoenix из-за отключения сети?
Sidenote: Я использую клиентскую библиотеку javascript внутри расширения Google Chrome. Для этого я извлек код ES6 из Phoenix, перевел его на javascript и немного изменил его, чтобы он работал автономно.
Теперь, когда я просто закрываю всплывающее окно, сервер немедленно запускает функцию terminate/2
с помощью reason = {:shutdown, :closed}
. На стороне расширения нет какого-либо близкого обратного вызова, так что это здорово!
Но когда клиент просто теряет сетевое соединение (я подключил второй компьютер и вытащил сетевой штепсель), то terminate/2
не будет запускаться.
Почему и как это исправить?
Я играл с опцией timeout
transport :websocket, Phoenix.Transports.WebSocket
, но это не сработало.
Update: С новым удивительным Phoenix 1,2 Presence
вещи, это не должно быть нужны.
Я просто заметил, что сервер не всегда распознает, когда всплывающее окно было закрыто. Поэтому я надеюсь, что решение для моего вопроса также решит это. –