Как часто я могу попросить ajax новые данные? - PullRequest
2 голосов
/ 27 августа 2010

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

Мой вопрос такой,будет моя дизайнерская работа?Я знаю достаточно php / ajax для разработки этого, используя jQuery для части ajax.Но я никогда не создавал такую ​​систему, и поэтому дизайн может иметь огромные недостатки.

Редактируемая часть веб-страницы - это таблица, в которой можно редактировать определенные ячейки (опять-таки, очень похоже на электронные таблицы Документов Google).

Теоретически это будет работать, всякий раз, когда ячейка таблицы изменяется, изменения сохраняются в истории, и каждые 1000 мс (после успешного возвращения последнего сообщения) я публикую изменения ячейки на сервере

Одновременно другая ajax-функция опрашивает сервер (также каждые 1000 мс после последнего успешного возврата вызова) и запрашивает список изменений, внесенных во все ячейки.

Это простой способ, как это делает Google?

Ответы [ 2 ]

1 голос
/ 27 августа 2010

Это спорный вопрос, и большинство решений зависят от требований и вариантов использования, а не от того, что является «правильным». Одним из более сложных решений является использование семафора:

http://en.wikipedia.org/wiki/Semaphore_(programming)

Флаг железнодорожных семафоров: http://en.wikipedia.org/wiki/Railway_semaphore_signal

Тем не менее, в вашем случае, я подозреваю, что следует использовать "последнее записанное значение". Просто поместите каждое редактирование в очередь на сервере и затем примените к его ячейке. Очевидно, что будут случаи, когда данные ненадлежащим образом перезаписываются, но именно здесь люди вступают в игру.

Вы можете определить, когда два пользователя сфокусировались и редактируют одну и ту же ячейку - когда это происходит, отправьте уведомление каждому пользователю о том, что его изменения могут конфликтовать с другим пользователем. Наименее агрессивный пользователь отступит и сделает что-то еще. Очевидно, что есть больше случаев, таких как массовое редактирование, но опять же, все это зависит от ваших требований.

0 голосов
/ 27 августа 2010

Ну, вы можете сократить эти два запроса до одного, разместив список изменений и получив список изменений в одном обращении. Вы можете оптимизировать его, только проверяя, когда пользователь фактически использует страницу (например, если вы получили событие наведения мыши за последние 30 секунд). И вы можете решить, что попадать на сервер каждую секунду не обязательно; может быть, 10 секунд. В конце концов, вполне реально, что для завершения одного вызова может потребоваться больше 1 с, если ваша сеть работает медленно.

После этого возникает вопрос о том, какая масштабируемость вам нужна для вашего сервера, и только вы можете ответить на этот вопрос. Чем больше опросов, тем меньше пользователей может поддерживать ваш веб-сервер.

Google Docs (я думаю) использует постоянно открытое push-соединение для получения обновлений, а не для опроса, но такую ​​архитектуру не стоит воспринимать легкомысленно И, конечно же, у них много тысяч серверов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...