Если я хочу создать чат AJAX, какую технику связи следует использовать для обеспечения масштабируемости? - PullRequest
4 голосов
/ 18 октября 2011

Некоторое время назад я собрал чат AJAX для ASP.NET MVC и jQuery.Javascript будет выходить на сервер каждые 7 секунд, чтобы проверить наличие новых сообщений.Очевидно, что это было ужасно по производительности, поскольку чат рос и включал в себя все больше и больше пользователей.Трафик сайта рос в геометрической прогрессии с таким большим количеством запросов.Пользователь может оставить компьютер включенным весь день и даже не быть там, и он все равно будет делать удары каждые 7 секунд.

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

1.) Как лучше всего разработать чат AJAX и сделать его масштабируемым?

2.) Что такое push и какя только что с jQuery?

Ответы [ 4 ]

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

Техника, которую вы должны использовать, это постоянные длительные соединения в реальном времени через веб-страницу с использованием WebSockets.Вы можете использовать эту библиотеку .

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

Сервер push - это технология, которая позволяет серверу передавать данные обратно клиенту, не заставляя клиента делать много запросов (например, каждые 7 секунд). Дело не в javascript, а в хороших серверных скриптах. Предстоящий HTML5 сделает это простым благодаря отправленным на сервер событиям и / или WebSockets . Это будет истинное TCP-соединение между различными машинами.

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

Надеюсь, это поможет. :) Удачи!

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

1.) Как лучше всего разработать чат AJAX и обеспечить его масштабируемость?

Я согласен с @freakish по поводу сложности и потенциального отсутствия масштабирования IIS.

Однако в работах под названием SignalR есть относительно новый вариант Microsoft, который может стать основной частью ASP.NET.Подробнее об этом связанном SO Вопрос:

2.) Что такое push и как бы я это использовал с помощью jQuery?

Частично ответил в другом месте, но это длительное постоянное соединение между сервером и клиентом, что означаетСервер может мгновенно «отправить» данные клиенту, когда у него появятся новые данные.

jQuery поддерживает выполнение запросов AJAX, но основная библиотека не поддерживает открытые способы выполнения длинных запросов HTTP или потоковой передачи HTTP.Подробнее в этом SO ответе на «Общие вопросы по длинному опросу / потоковой передаче HTTP» .

0 голосов
/ 18 октября 2011

Node.js становится довольно популярным для создания чего-то подобного и поддерживает сокетные соединения, так что вы можете выгружать данные только при наличии нового сообщения. Но это будет изучение чего-то совершенно нового.

Другим хорошим потенциалом было бы использование MVC OutputCacheAttribute и использование параметра зависимости SQL, чтобы ваша страница AJAX могла кэшироваться и являлась новым запросом только при появлении нового сообщения чата. Также вы хотели бы, чтобы ваш контроллер был асинхронным контроллером, чтобы помочь снизить нагрузку на IIS.

Наслаждайтесь, оптимизация всегда веселая и отнимает много времени!

...