У меня есть приложение сервера Elixir/Phoenix, и клиенты подключаются через систему сборки в каналах через websockets. Теперь я хочу определить, когда пользователь покидает канал.
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
это больше не нужно.