Событие, отправленное сервером: лучшие рекомендации для выявления повторного подключения клиентов - PullRequest
2 голосов
/ 19 февраля 2020

Я создаю приложение «билет на цифровую очередь», в котором люди могут разместить очередь и другие, выстроиться в очередь. Если вы выстроитесь в очередь, вы увидите количество обслуживаемых в данный момент номеров, количество людей в очереди, ETA и т. Д. c. Это веб-интерфейс, и я решил использовать SSE для изменения sh (например, когда изменяется номер, который в данный момент обслуживается) для всех в этой указанной c очереди.

Мне нужен способ сопоставить / идентифицировать каждого клиента, чтобы, если они отключатся на некоторое время, а затем снова подключатся, они все равно будут оставаться на своих местах. Мне известно, что в случае ошибки браузер или клиент SSE автоматически попытаются восстановить соединение. Обычно задерживается на несколько секунд в зависимости от браузера. Кроме того, поток данных продолжается с той точки, в которой он был отключен, поэтому никакие сообщения не теряются при использовании Last-Event-Id.

Но если, например, пользователь по ошибке выйдет из сафари, снова откроет его и вернется к тому же URL-адресу, будет установлено новое соединение, ie оно не «переподключится».

Я рассмотрел токены или куки для выполнения sh этого. Однако стандарт SSE не поддерживает отправку заголовков (или данных POST). Только ПОЛУЧИТЬ данные и куки. Я мог бы передать токен в качестве параметра запроса. Вот некоторая информация, которую я прочитал по этому вопросу:

https://community.apigee.com/questions/28794/best-practices-for-passing-an-access-token-without.html

https://tools.ietf.org/html/rfc6750#section -2,3

Люди обсуждают проблемы безопасности, связанные с этим, но я думал, что, поскольку люди выстраиваются в очередь анонимно, и тот факт, что токен будет использоваться только для идентификации повторного подключения клиентов, это не будет проблемой. Кроме того, я отвечаю за заднюю часть и переднюю часть.

Использование файлов cookie также может работать, но я почти ничего не знаю о том, как они работают. Я предполагаю, что мне нужен постоянный повар ie, чтобы идентифицировать клиента, который "переподключается"? Если нет, то я должен использовать вместо этого WebSockets или опрос? Причина, по которой я выбрал SSE, заключалась в том, что мне нужно только однонаправленное общение.

Я новичок в этом, поэтому любые советы приветствуются! Чтение всего, что я мог получить в течение нескольких дней, но пока не нашел хорошего решения. Возможно, есть какой-то другой способ сделать sh то, что я хочу?

1 Ответ

1 голос
/ 20 февраля 2020

Я бы определенно go с поваром ie. Я не пробовал это в Go, но эта ссылка показывает, как устанавливать и получать куки .

Недостатками может быть то, что пользователь может обойти его, удалив куки (и они могут быть мотивированным, чтобы сделать это, чтобы они могли перейти в очередь?) и (по крайней мере, в ЕС) должны показать уведомление «мы используем куки». Вы упомянули случай, когда пользователь закрыл свой браузер, поэтому сессионного повара ie недостаточно, вам нужно будет использовать повара ie со сроком действия.

Вторым вариантом будет попытаться «дактилоскопировать» пользователя с помощью комбинации user-agent, IP-адреса и, возможно, некоторых других заголовков. Хотя это ненадежно, особенно если пользователи используют общий прокси, VPN и т. Д. c. (И кто-то может все еще обойти это, например, переключая браузер, или используя плагин, который позволяет менять пользовательский агент.)

...