среда, 9 февраля 2011 г.

Проблема дисконнекта

Проблема дисконнекта:

Tags:

При работе с медиа серверами (да и вообще с TCP соединением) нужно решить одну важную, но не очевидную проблему. И проблема эта -- нестабильное соединение. Увы, соединение клиента с сервером иногда рвется. Это случается относительно редко, но в крупном проекте с большим числом пользователей вы будете регулярно получать жалобы от них.

С самими разрывами соединений ничего сделать нельзя, но можно сделать грамотный реконнект. В идеале реконнект вообще должен быть незаметен для пользователя. Но тут уж много зависит от конкретного приложения. (rtmp-service-mate-ext поддерживает реконнект по дефолту.)

К сожалению, идеальный реконнект со стороны клиента -- это еще не все. Проблема еще в том, что при разрыве соединения клиент об этом узнает сразу, а вот сервер не сразу. Серверу нужно на это 60 секунд (wowza и red5 сами пингуют клиента и определяют этот момент, на fms такое нужно реализовать вручную).

Итак, когда клиент реконнектится и пытается авторизоваться, оказывается, что пользовательский аккаунт уже связан с другим клиентом, с которым соединение потеряно, но сервер об этом еще не знает. Если у нас система спроектирована так, что одному пользователю соответствует один клиент (одно соединение с клиентским приложением), то вот сейчас нужно решать, а к какому из двух (или даже больше) клиентов привязать данного пользователя? Может быть, предыдущий клиент — зомби, потерявший соединение, но мы об этом пока не знаем? А может быть, предыдущий клиент — нормальный, активный клиент. А новый клиент — кто-то другой, пытающийся зайти под тем же аккаунтом? [...]

Комментариев нет:

Отправить комментарий