2015-01-07 4 views
0

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

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

Но представьте себе, что три человека сейчас смотрят этот модуль. Как заметить все из них, чтобы обновить контент?

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

+1

С длинным опросом, th e клиент периодически проверяет сервер ** ** с использованием AJAX * для нового содержимого и после его получения новый контент просто добавляется к div. Не нужно обновлять страницу –

+0

Я редактировал вопрос, чтобы сделать его более ясным –

+0

Есть ли причина, по которой вы не хотите, чтобы длинный опрос автоматически обновлял div с новым контентом? Это кажется более эффективным. Но да, вы можете создать флаг, если хотите. Это все возможно. –

ответ

1

Senario: Один сервер; N Клиенты в той же Chanel

Сервер реализует пул для одной шанель;
Pool настроен следующим образом (это может быть массивом/класс/...):
ID (Integer/строка)
=> Новая запись вставляется, если клиент сделал соединение, и это будет определены его ID
=> Эта запись будет удалена, если клиент сделать deconnection или выйти из этого Шанель
сООБЩЕНИЯ (String): Новые сообщения должны быть сцеплены к старым, которые хранятся в бассейне

Каждый раз, когда клиент отправляет новое сообщение на сервер
1 - Все сообщения пула будет обновлены конкатенациями непрочитанных сообщений на новом (для отправителя, за исключением)

Каждый раз, когда клиент делает запрос на сервер (с помощью Ajax Long Pooling)
1 - сервер будет доставлять ему правильное сообщение на основе его ID
2 - Сотрите сообщение

с этой реализацией, клиент может получить пустое сообщение, так и на переднем конце вы должны сделать соответствующую операцию

Смежные вопросы