Получение данные в промежутке между загрузкой страницы и инициализацией подключения по websocket?

Друзья, помогите расширить сознание.



Предположим, что есть поток событий происходящих на сервере и их нужно отображать на клиенте. Пусть это будет чат или что-то подобное. Есть опыт использования Dklab_realplexor для решения этой задачи. Смотрю на node.js + socket.io и не могу понять вот какую штуку.



Алгоритм работы с Dklab_realplexor такой:

1. Получили ID последнего события (cursor).

2. Получили из базы некоторое количество событий с id <= cursor.

3. Рендерим страницу, показывая последние события.

4. Инициализаруем подключение к realplexor, сообщив ему cursor.



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



Каким образом не случается (или случается) этой потери при использовании socket.io? Правильно ли я понимаю, что единственным способом обойти проблему является создание на клиенте события «start» с передачей id последнего события, а сервером в ответ выдать все что произошло с тех пор?



CLIENT

var socket = io.connect('http://localhost');<br>
  socket.emit('start', { lastKnownId: lastKnownId });<br>
  socket.on('event', function (data) {<br>
    // в data новые события<br>
  });<br>




SERVER

var io = require('socket.io').listen(80);<br>
  io.sockets.on('connection', function (socket) {<br>
    socket.on('start', function (data) {<br>
      socket.emit('event', { data: getEventsAfter(data.lastKnownId) });<br>
    });<br>
  });<br>




И второй вопрос отсюда же. Как учитываются перебои сети? Т.е. я не получу на клиенте события, которые приизошли, пока на несколько секунд не было коннекта к сети?
  • Вопрос задан
  • 3078 просмотров
Пригласить эксперта
Ответы на вопрос 1
@esenin
Отдавать события, которые произошли после определенной метки по ID. Все верно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы