Звичайно, я знаю про Ajax, але проблема з Ajax полягає в тому, що браузер повинен часто опитувати сервер, щоб виявити, чи є нові дані. Це збільшує навантаження сервера.
Чи є кращий метод (навіть за допомогою Ajax), окрім частого опитування сервера?
Звичайно, я знаю про Ajax, але проблема з Ajax полягає в тому, що браузер повинен часто опитувати сервер, щоб виявити, чи є нові дані. Це збільшує навантаження сервера.
Чи є кращий метод (навіть за допомогою Ajax), окрім частого опитування сервера?
Відповіді:
Так, те, що ви шукаєте, це COMET http://en.wikipedia.org/wiki/Comet_(programming) . Інші хороші терміни пошуку Google - це AJAX-push та reverse-ajax.
Так, це називається Зворотний Аякс або Комета . Комета - це, в основному, парасольовий термін для різних способів відкриття довготривалих HTTP-запитів з метою передачі даних у реальному часі до веб-браузера. Я б рекомендував StreamHub Push Server , у них є цікаві демонстрації, і почати роботу набагато простіше, ніж будь-який з інших серверів. Ознайомтесь із початком роботи з кометою та підручником StreamHub для швидкого вступу. Ви можете скористатись спільнотою Edition, яка доступна для завантаження безкоштовно, але обмежена 20 одночасними користувачами. Комерційна версія заслуговує на лише підтримку, плюс ви отримуєте клієнтські адаптери SSL та Desktop .NET & Java. Довідка доступна через групу Google, у мережі є безліч навчальних посібників, а також є адаптер GWT Comet .
Сьогодні вам слід використовувати WebSockets. Це стандарт 2011 року, який дозволяє ініціювати з'єднання з HTTP, а потім модернізувати їх до двонаправленого зв'язку клієнт-сервер на основі повідомлень.
Ви можете легко ініціювати з'єднання з javascript:
var ws = new WebSocket("ws://your.domain.com/somePathIfYouNeed?args=any");
ws.onmessage = function (evt)
{
var message = evt.data;
//decode message (with JSON or something) and do the needed
};
Важка обробка залежить від вашого стенограму.
Подивіться на Комету (підробка на той факт, що «Аякс» є миючим засобом і так само «Комета»), що в основному є «зворотним Аяксом». Пам’ятайте, що для отримання цього сповіщення потрібен тривалий зв’язок із сервером, щоб кожен користувач отримував сповіщення, тож знайте про наслідки для продуктивності при написанні програми.
Комета, безумовно, те, що ви хочете. Залежно від ваших вимог до мови / рамки, доступні різні бібліотеки серверів. Наприклад, WebSync - це інтегрований IIS сервер комет для розробників ASP.NET/C#/IIS , і є ще безліч інших автономних серверів, якщо вам потрібна більш тісна інтеграція з іншими мовами.
Я настійно пропоную вкласти деякий час на Comet, але я не знаю реальної реалізації або бібліотеки, яку ви могли б використовувати.
Для свого роду "панель управління центром виклику" веб-програми, яка включала в себе оновлення агента та статус черги викликів для живого Callcenter, ми розробили власне рішення, яке працює, але далеко від бібліотеки, яку ви могли використовувати.
Що ми зробили, це впровадити невелику послугу на сервері, яка розмовляє з телефоном-системою, чекає нових подій та підтримує фотографію ситуації. Ця послуга надає невеликий веб-сервер.
Наші веб-клієнти підключаються через HTTP до цього веб-сервера і запитують останню фотографію (закодовану в XML), виводять її на екран, а потім знову виходять із запитом про нову фотографію. На даний момент веб-сервер може:
Таким чином, коли опитуються клієнти, він отримує відповідь максимум від 0 до 30 секунд. Якщо нова подія вже створена, вона отримує її негайно), інакше вона блокується, поки не породжується нова подія.
Це в основному опитування, але це дещо розумне опитування, щоб не перегріти веб-сервер. Якщо Comet - це не ваша відповідь, я впевнений, що це може бути реалізовано за допомогою тієї ж ідеї, але більш широко використовуючи AJAX або кодуючи JSON для кращих результатів. Це було розроблено до епохи AJAX, тому є багато можливостей для вдосконалення.
Якщо хтось може забезпечити реальну легку реалізацію цього, чудово!
Ще один, стандартний спосіб - це SSE (події, надіслані сервером, також відомі як EventSource , після об’єкта JavaScript).
Комету насправді придумав Алекс Рассел з Доджо Інструментарій ( http://www.dojotoolkit.org ). Ось посилання на додаткову інформацію http://cometdproject.dojotoolkit.org/
Є й інші методи. Не впевнений, чи вони "кращі" у вашій ситуації. У вас може бути аплет Java, який підключається до сервера під час завантаження сторінки і чекає, коли сервер надішле речі. Це було б трохи повільніше при запуску, але дозволило б браузеру отримувати дані з сервера нечасто, без опитування.
Ви можете використовувати програму Flash / Flex на клієнті з BlazeDS або LiveCycle на стороні сервера. Дані можуть бути передані клієнту за допомогою RTMP-з'єднання. Майте на увазі, що RTMP використовує нестандартний порт. Але ви можете легко повернутися до опитування, якщо порт заблокований.
Можна досягти того, на що ви прагнете, використовуючи стійкі http-з'єднання.
Перегляньте статтю про комету у Вікіпедії, це хороше місце для початку.
Ви не надаєте багато інформації, але якщо ви хочете створити якийсь сайт, керований подіями (a'la digg spy) або щось подібне до цього, ви, ймовірно, будете дивитись на реалізацію прихованого IFRAME, який підключається до URL-адреса, де з'єднання ніколи не припиняється, і тоді ви натискатимете теги скриптів із сервера на клієнта для виконання оновлень.
Можливо, варто перевірити Meteor Server - веб-сервер, розроблений для COMET. Хороша демонстрація, і вона також використовується twitterfall .
Після того, як з'єднання відкривається до сервера, воно може залишатися відкритим, і сервер може висувати вміст давно, як я це робив з використанням, multipart/x-mixed-replace
але це не працювало в IE.
Я думаю, що ви можете робити розумні речі з опитуванням, що робить його більш схожим на натискання, не надсилаючи вміст незмінними заголовками, але залишаючи з'єднання відкритим, але я цього ніколи не робив.
Ви можете спробувати наш компонент Comet - хоча це надзвичайно експериментально ...!
перевірте цю бібліотеку https://github.com/SignalR/SignalR, щоб знати, як динамічно передавати дані клієнтам, коли вони стануть доступними
Ви також можете заглянути в Java Pushlets, якщо ви використовуєте сторінки jsp.
Можливо, хочеться також подивитися на ReverseHTTP .