Друзья, помогите расширить сознание.
Предположим, что есть поток событий происходящих на сервере и их нужно отображать на клиенте. Пусть это будет чат или что-то подобное. Есть опыт использования 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>
И второй вопрос отсюда же. Как учитываются перебои сети? Т.е. я не получу на клиенте события, которые приизошли, пока на несколько секунд не было коннекта к сети?