LINUX.ORG.RU

Real-time оповещения на сайте

 ,


2

5

Есть страничка с формой и кнопкой отправки некой заявки.

Нужно сделать веб-приложение, которое, во-первых, будет обрабатывать приходящие данные с этой странички и записывать их в БД (скорее всего MySQL), а во-вторых, должно выводить данные из этой БД для операторов. При этом, надо сделать оповещение о поступлении новых заявок в режиме реального времени (например, как сообщения вконтакте).

Я раньше подобным не занимался, но примерно знаю, как это можно реализовать. Например, через вебсокеты. Проблема в том, что я точно не знаю, какое ПО стоит у операторов. Если там старый браузер или заблочены порты, то вебсокетами воспользоваться будет проблематично. Можно на стороне клиента запускать js-скрипт, который будет опрашивать сервер каждые n секунд, но тогда возрастет нагрузка на сервер.

В общем, к ЛОРу у меня вот такие вопросы:

  • Какие технологии лучше использовать на клиенте, при условии, что там может быть старый осел, который не поддерживает модные фишки типа вебсокетов? Т.е. расчет на старое ПО.
  • На серверной части хочется использовать питон, а в качестве фреймворка (и сервера), видимо, торнадо, т.к. сможет держать много открытых соединений. Какие подводные камни?

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

Перемещено true_admin из development



Последнее исправление: memnek (всего исправлений: 1)

Можно на стороне клиента запускать js-скрипт, который будет опрашивать сервер каждые n секунд

Это самый простой и рабочий вариант

но тогда возрастет нагрузка на сервер

Генерируй статический файл, пусть AJAX его читает

хотелось бы ссылок всяких, что почитать на эту тему

https://api.jquery.com/jQuery.ajax/

http://www.w3schools.com/js/js_timing.asp

anonymous
()

Можно на стороне клиента запускать js-скрипт, который будет опрашивать сервер каждые n секунд, но тогда возрастет нагрузка на сервер.

А сколько планируется держать сессий, что беспокоишься о нагрузке? Если более менее современное железо и торнадо - так можешь легко держать одновременных 4-5к соединений.

З.ы. можешь еще воспользоваться Java-апплетом, будет работать не зависимо от браузера.

Siado ★★★★★
()
Ответ на: комментарий от anonymous

Генерируй статический файл, пусть AJAX его читает

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

memnek
() автор топика
Ответ на: комментарий от Siado

можешь еще воспользоваться Java-апплетом

не факт, что ява будет установлена на пк. а браузеры есть везде.

memnek
() автор топика
Ответ на: комментарий от anonymous

да, что-то подобное хотелось бы. увидел пост на швабре про эти технологии, и там есть ссылки на socket.io. последний, в частности автор ругал за всякие быги. но это было в 11-м году. а как сейчас обстоят дела? что лучше/надежнее, сокжс или сокет.ио?

memnek
() автор топика
Ответ на: комментарий от provaton

да, анон посоветовал аналог (sockjs). собственно вопрос в том, что из них лучше на сегодняшний момент? просто не хочется делать в одной либе, словить непонятные баги, а потом переделывать клиент на другой.

memnek
() автор топика
Ответ на: комментарий от memnek

и еще лично у меня, завести gevent-socketio сразу не получилось. а вот с sockjs и tornado заработало сразу. пробовал в личных целях, никакого Ынтерпрайза.

anonymous
()

я думаю операторов у тебя там не 10 тысяч, поэтому можно смело/тупо делать на аяксе, работать будет везде

umren ★★★★★
()

Делай самым простым способом - опрос по таймеру, и через ajax загружай маленький json, если изменений нет в json, то отдавай просто 304 заголовок и браузер не будет его перекачивать, это очень быстро и надежно. Про нагрузку не беспокойся, я тестировал 550 клиентов к торнадо на опросе ajax'ом каждые 5 секунд - торнадо просто не заметил нагрузки. С 0% CPU подскачило до 1.5%. Это копейки. А для mqsql такие запросы раз в 5сек / 500 если равномерное распределение - это тоже детская шалость. Вобщем, даже не сомневайся. И про вебсокеты - там не будет проблем с NAT, т.к. если с сокета идёт изначально исходящее соединение к порту сервера, то NAT добавляет этот сокет в таблицу маршрутизации и к клиенту за натом данные проходят согласно этой таблице.

menangen ★★★★★
()

Не слушай никого. То что тебе нужно это long polling. Самый прямой способ для tornado.

ei-grad ★★★★★
()
Ответ на: комментарий от memnek

а как быть с правами доступа? нужно проверять, залогинен ли юзер

1. Генерируй для сессии (или пользователя) случайную строку и используй ее в имени файла

2. Генерируй файл за пределами доступа веб-сервера. Аяксом дергай скрипит, он пусть проверяет доступ и отдает файл

3. http://wiki.nginx.org/X-accel (это почти п.2)

Это все возможно преждевременные оптимизации, можно попробовать просто отдавать из СУБД.

Лонг поллинг и веб сокеты могут сломаться если пользователь сидит за прокси. Как ни странно, за проксями сидит куча народу, особенно корпоративного

anonymous
()

Если там старый браузер

Бить по пальцам пока не перестанут.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.