Флеш розетки в чате - PullRequest
       28

Флеш розетки в чате

1 голос
/ 14 октября 2011

Я много слышу о людях, использующих флеш-сокеты в чате и других длинных приложениях для опроса.

Почему вспышка используется в этих сценариях?

Ответы [ 2 ]

4 голосов
/ 17 октября 2011

Производительность , поскольку Flash предоставляет разработчику Сокеты .Используя сокеты, вы можете открыть соединение и держать его открытым, пока клиент не покинет приложение.Когда на сервере появляется новая информация, она записывает данные в канал связи, и клиенты автоматически ее читают.Никаких подтягиваний, никаких издержек соединения, никаких дополнительных данных не требуется (например, заголовок протокола HTTP).

Сеть задержка и пропускная способность ограничит объем данных, которые выСервер может отправить.Это также ограничит объем данных, которые может прочитать ваш клиент.Что касается сервера, то количество ресурсов (обычно оперативной памяти) ограничивает количество активных соединений (одновременно открытых), которые вам разрешено сохранять.

Когда HTTP используется для приложения чата (или другого приложения с длительным опросом),связь не имеет состояния, что означает, что приложение должно открывать новое соединение с сервером каждый раз, когда ему приходится обмениваться данными.Вы можете использовать постоянное соединение (Keep-Alive), чтобы повторно использовать существующее соединение, но в зависимости от времени ожидания это ухудшит производительность сервера:

  • Высокийзначение тайм-аута : больше данных передается по одному соединению, но слишком долго связывает несколько процессов или потоков сервера.Сервер будет поддерживать меньшее количество пользователей одновременно.

  • Низкое значение тайм-аута : серверные процессы быстро освобождаются для обслуживания другого запроса, поскольку они сбрасывают соединение раньше, однако, если тайм-аутслишком низкое значение, вы в конечном итоге не будете повторно использовать соединение, что приводит к новому соединению каждый раз, когда вы должны обмениваться данными.Очень плохо.

Кроме того, протокол HTTP не был разработан для связи в реальном времени.Это требует текстовых заголовков, которые будут тратить драгоценное количество байтов при общении.Я написал статью , сравнивающую различные протоколы связи для Smartfox Server, и заметил, что в текстовых протоколах (XML, JSON) заголовок (и дополнения) представляет 50-75% сообщенияразмер в моем случае;хотя сообщение «чистые» данные было очень маленьким (28 байт), оно дает представление о заголовке.

Если вы держите канал открытым в течение всего времени связи и обмениваетесь данными в двоичной форме, вы избегаетенакладные расходы на соединение и могут настраивать сообщения для достижения высокой пропускной способности.

УВЕДОМЛЕНИЕ : сегодня вы можете использовать WebSockets для достижения результатов, которые были возможны только при использовании Flash-связи в прошлом, Socket.io , например, обеспечивает подключение в реальном времени к каждому браузеру с использованием JavaScript;под капотом он использует WebSockets (при наличии), или Flash, или AJAX, или другую технику, поддерживаемую браузером, для установления связи.

1 голос
/ 15 октября 2011

API, разрешающий простое TCP-соединение, не всегда доступен для JavaScript (это будет API WebSocket).У некоторых браузеров их пока нет.Когда вы говорите «длинный опрос», вы, вероятно, имеете в виду технику, используемую для имитации простого TCP через HTTP (своего рода абсурд :)).Это HTTP-запрос, который отправляет огромное количество времени, но отправляется частями.Этот метод является скорее неправильным использованием HTTP, но тем не менее популярен, потому что у нас есть ограниченные альтернативы, когда речь идет о веб-разработке.

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

Вы, конечно, могли бы разработать программу чата, работающую по HTTP, но из-за природы HTTP, не имеющей состояния, это делало бы задачи по обслуживанию сеансов более сложными и менее эффективными (так как от вас требовалось бы отправлять сообщения).информация о сеансе снова и снова с каждым запросом).

Наконец, несколько популярных форматов IM (например, Jabber) требуют TCP-соединения.Jabber также требует, чтобы вы кодировали Base64 содержимое (каким бы глупым оно ни было, это формат, который используют многие люди ...) и использовали какой-то алгоритм шифрования для аутентификации.Flash работает быстрее при работе с двоичными данными, чем JavaScript / там проще реализовать алгоритм шифрования.

...