Опрос, комета, веб-сокеты и т. Д. - PullRequest
8 голосов
/ 31 января 2011

Мне нужно встроить некоторые довольно агрессивные возможности "автоматического обновления" в веб-приложение. Это своего рода фотогалерея, и изображения хранятся на AmazonS3, но данные об изображениях хранятся в нашей собственной базе данных. Я поиграл с опросом сервера и отправкой ajax-вызовов для получения обновленных данных. Я действительно обеспокоен нагрузкой на сервер (ы) с этим методом. Время от времени страница должна обновляться каждые 15–30 секунд.

Я читал на Comet, и я просто не продал, что этот "хак" - отличная идея. WebSockets, вероятно, помогут, но я обеспокоен тем, что они слишком новые и слишком неподдерживаемые. Итак, как говорится, есть ли у кого-нибудь рекомендации о том, как спроектировать систему, которая нуждается в частом обновлении и имеет потенциал для очень высокой базы пользователей?

Я не склонен просто бросать больше серверов для решения проблемы, но не уверен, что это лучший подход. И прежде чем кто-либо еще предложит это, я не могу сделать Flex, потому что веб-приложение должно работать на iPad.

Ответы [ 2 ]

7 голосов
/ 01 февраля 2011

WebSockets кажется довольно хорошим выбором.Отключение WebSockets в Firefox 4 и Opera 11, вероятно, носит временный характер, поскольку рабочая группа начала выпускать проекты, в которых рассматриваются проблемы.Кроме того, резервная копия флэш-памяти web-socket-js будет по-прежнему работать даже в браузерах, в которых отключены собственные веб-сокеты.Также стоит отметить, что iOS 4.2 имеет встроенные WebSockets.Так что с нативным WebSockets + fallback WebSockets поддерживается практически везде.

Если вы используете WebSockets, вы также можете рассмотреть возможность отправки обновлений, а не проведения опроса клиентов.Это поможет предотвратить случайную DDOS-работу сервера с клиентами.Задержка будет только увеличиваться для клиентов, и в этот момент вы можете начать добавлять больше ресурсов на стороне сервера.

Если Javascript на стороне сервера не исключен, то вы можете проверить Socket.IO , который представляет собой инфраструктуру Nodejs WebSockets, которая выбирает лучший транспорт, который автоматически поддерживается и клиентом, и сервером (предпочитая нативные WebSockets, затем откат WebSockets, а затем различные варианты длинного опроса).Это также позволяет серверу и клиентскому коду выглядеть очень похоже, поскольку включает библиотеку на стороне клиента.На данный момент Socket.IO, похоже, имеет немало идей.

Если вы ориентированы на Ruby, вы, вероятно, захотите проверить em-websockets .И Socket.IO, и em-websockets являются серверами, основанными на событиях, которые позволяют очень большое количество клиентов, особенно там, где первостепенное значение имеет задержка, а не пропускная способность.

0 голосов
/ 20 апреля 2011

Группа WS-I опубликовала нечто, называемое "Надежный безопасный профиль" , в котором есть Glass Fish и .NET реализация , которые, по-видимому, хорошо взаимодействуют .

Если повезет, есть реализация Javascript .

Существует также реализация Silverlight, которая использует HTTP-дуплекс. Вы можете подключить javascript к объекту Silverlight , чтобы получать обратные вызовы при возникновении push.

Есть также коммерческие платные версии .

...