2009-06-08 10 views
1

Я ищу самый быстрый способ взаимодействия нескольких пользователей на разных компьютерах, и я думаю, что это использование сервера в качестве посредника связи. Таким образом, пользователь A и пользователь B создают соединение сокета с каким-либо сервером, и всякий раз, когда пользователь A делает что-то, он отправляет сообщение на сервер, который затем отправляет сообщение пользователю B.События на стороне сервера

Более поздняя часть - это то, что я Я пытаюсь сделать в javascript. Я уже сделал это во Flash с XMLSocket, так есть ли эквивалентная функциональность в javascript?

PS: Я нашел EventSource() здесь: http://dev.w3.org/html5/eventsource/, но я не уверен, что он реализован браузерами.

Редактировать: В идеале это будет использоваться для таких приложений, как чат-приложения, где необходимы события в реальном времени, поэтому использование аякс-вызовов каждые X секунд будет слишком медленным. Почему W3C еще не добавил такой объект HTML 5, поскольку он кажется очень полезным.

+1

W3C не добавил для него HTML5-объект, потому что HTML5 было бы неправильным местом для его включения. Он должен быть включен в стандарт JavaScript, а не в стандарт HTML. –

ответ

2

Возможно, вы захотите изучить Comet (reverse Ajax) для создания событий, отправленных сервером. Насколько я знаю, ни один браузер не реализует EventSource().

Ajaxian также имеет a good article about Comet, включая такие примеры, как GTalk.

Этот параметр можно считать «плохим», поскольку он постоянно поддерживает соединение с сервером, что может увеличить нагрузку.

Вы можете рассмотреть опрос, сделав запрос Ajax каждые X секунд, чтобы проверить наличие обновлений. Как упоминалось в статье Ajaxian, которую я включил, 37Signals опрос каждые 3 секунды для чата в режиме реального времени, и это, кажется, работает «достаточно хорошо» для них.

0

Ну, у вас есть ajax. Это не поддерживает открытое соединение (за исключением случаев подключения keep-alive, но js не может работать с ними, как сокеты). Вы отправляете XML-кодированное сообщение на сервер из A, а B регулярно обследует сервер для сообщений. Серверу придется хранить почтовый ящик для каждого клиента.

1

Один из способов сделать это - использовать модем flash-javascript. Существует несколько вариантов этого. Я использовал this one. Это очень быстро! Еще одно преимущество заключается в том, что вам не придется менять сервер, чтобы он работал.

0

Flash-JavaScript? Как насчет Java-JavaScript (I.e. LiveConnect). Я создаю страницу прямо сейчас, где я использую скрытый Java-апплет (ширина и высота 1 пиксель с тем же цветом, что и фон), чтобы иметь полный контроль над всеми хорошими низкоуровневыми сообщениями сокета и от апплета вызвать функцию JavaScript делать обновления на веб-странице DOM/HTML при появлении новых данных. Java SDK является бесплатным. Flash SDK нет, в прошлый раз я попытался найти, где его скачать.

3

Ситуация здесь немного изменилась.

Смотрите скриншот:

alt text

Все major browsers except IE - включая Firefox, Webkit (т.е. Chrome плюс Desktop/Mobile Safari) и Opera имели реализацию chance to implement HTML5, в server-side push.

Это отличная новость для разработчиков приложений для iPhone/iPad/Android, но не так важна для остального мира, которая по-прежнему борется с реализацией IE6-8 для бедных веб-стандартов, а Firefox - догоняющим.

Текущая ситуация заключается в том, что если вы хотите использовать кросс-браузер, то Comet server, описанный Dan (или повторный опрос iFrame/xmlhttp), по-прежнему является вашим лучшим вариантом.

+2

Теперь все изменилось. Теперь все основные браузеры, кроме IE (и Android), [поддерживают события, отправленные сервером] (http://caniuse.com/#feat=eventsource). Существуют также [polyfills] (https://github.com/remy/polyfills/blob/master/EventSource.js) [доступно] (https://github.com/Yaffle/EventSource) для браузеров, не поддерживающих поддержку слишком. –

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