LINUX.ORG.RU

В nginx 1.3 появилась поддержка веб-сокетов

 , , ,


0

2

В последней версии сервера nginx добавлена реализация протокола WebSocket. Нововведение, доступное в базовой поставке, позволит существенно упростить создание веб-приложений, требующих обмена сообщения между сервером и клиентом в режиме реального времени.

WebSocket — технология, делающая возможным двунаправленный обмен данными между клиентом и сервером поверх TCP-соединения. Протокол требует реализации как на клиенте, так и на сервере. В настоящее время поддержка веб-сокетов имеется в десктопных версиях всех популярных браузеров.

nginx — открытый веб- и обратный прокси-сервер, отличительными чертами которого являются высокая производительность и нетребовательность к ресурсам. nginx — второй по популярности веб-сервер в мире, обслуживающий около 30 % высоконагруженных сайтов.

>>> Подробности

★★

Проверено: Shaman007 ()
Ответ на: комментарий от Vit

На самом деле, качественная выгода от вебсокетов именно в той части, которую покрывает SSE. Остальное или не нужно, или не критично.

Частично согласен. Но вебсокеты открывают больше возможностей.

Просто поддержка SSE кривовата.

А вы работали с websocket'ами? Поддержка со стороны браузеров и server-side библиотек весьма печальна. Единственное что позволяет работать без проблем: socket.io (Node.js) и Chanel API (Google App Engine), все остальные реализации либо не работают с разными версиями браузеров, либо делают fallback к long poling и при этом иногда теряют данные (приходиться костылять дополнительное кеширование, идемпотенцию), либо просто умирают при конекте с браузера с кривой реализацией одного из draft'ов (привет iOS 5.x!).

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

А вы работали с websocket'ами?

Да, работал. Пока больше не хочу :) . Нодовские библиотеки кратко описываются словами «кривое протекающее говно». Говорят, где-то есть секретные люди, у которых работает и socket.io и faye. Но на просьбы привести конкретные примеры продакшенов или помочь найти ошибку, все начинают ссылаться на анонимных марсиан.

Последний раз где-то осенью вертел на фонтелле. Как только переключаешь RPC на вебсокеты - сразу за несколько дней насасывает гиг памяти и падает. Возвращаешь обратно на HTTP - памяти ест 50 метров и стоит как влитая.

И есть еще один нюанс, про который многие забывают. Вебсокеты пока не пакуются. Если начать там активно гонять вообще всё подряд, траффика будет в 10 раз больше.

Но вцелом очень гуд, что в nginx прокси воткнули. Глядишь, все это нодовское страховидло к лету до ума доведут.

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

Для nginx был внешний модуль. Но всем было влом его качать и компилять.

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

WebRTC вон пилят, а как p2p файлы передавать?

Вот так: PeerJS.

Проблема-то больше в том, что люди, как правило, за фаерволами/NAT'ами сидят. И тут без сервера-посредника никак не обойтись.

Сервер-посредник тоже предложен: PeerJS-Server

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

Ты не прав, там сервер совсем не из-за NAT нужен, а как раз потому, что там вебсокеты и используются, а никакой не WebRTC.

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

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

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

Не, ничего там про WebRTC так и не нашёл. Хоть на сайте и в README и сказано, что оно поверх WebRTC и UDP, но я в коде не могу найти ничего, кроме XHR и WebSocket, так что выше мой ответ снова актуален. Если я чего-то не нашёл в коде, прошу мне на это указать, мне самому интересно.

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

Именно из-за NAT, причем когда он на обеих сторонах.

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

Не, ничего там про WebRTC так и не нашёл.

А что искал?

RTCPeerConnection

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

Ссылку? Я посмотрел реализации Peer и Socket и успокоился.

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

причем когда он на обеих сторонах

Эта ситуация, во многих случаях, обходится обычным STUN, не говоря уже о TURN.

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

ВНЕЗАПНО! STUN и TURN требую наличия внешнего сервера. Первый для хендшейка на ассиметричном нате, второй для тунелирования траффика на симметричном.

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

ВНЕЗАПНО, я в курсе, но их не надо писать заново, всё уже украдено за нас. Что же здесь за сервер?

Binary ★★★★★ ()

Я просто оставлю здесь...

... Для сишников есть библиотека серверной реализации WebSockets — libwebsockets. Ebuild ждать ненужно, он уже есть.

И, ЕМНИП, от того же автора, проксик между WebSockets и TCP sockets — wsproxy.

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

сейчас: бесплатный браузер с уже встроенным автообновлением. об остальном заботится предоставитель сервиса за намного меньшие деньги. всё что необходимо пользователю - это написать в адресную строку и залогиниться

Ну да. Дегенератам кроме фермочки и полива любимого огородика ничего не надо. Тут и броузера хватит.

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

Угу...

... И, что самое смешное, одни и те же люди (если я не ошибаюсь) негодуют против анальных зондов от Яббла/ведроида/кого_там_еще, но при этом готовы самостоятельно слить свои данные в неизвестно чьи руки.

anonymous ()
Ответ на: комментарий от border-radius

Погляжу потом, спасибо. Давненько последний раз игрался с вебртц.

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

Ага, поиск, почта и карты - это не серьёзно. А тебя, наверное, всё по-взрослому, да? Не то, что у этих гуглов всяких.

ForwardToMars ()
Ответ на: комментарий от Binary

софт нужно ставить. А потом удалять через 10 минут :). А браузер - не нужно, уже стоит.

ForwardToMars ()
Ответ на: комментарий от ComradeDOS

который инкапсулирует протокол бакэнда в WebSoket'ы.

А у бакэнда - велосипед? И в чем профит велосипеда?

ForwardToMars ()
Ответ на: Я просто оставлю здесь... от anonymous

И, ЕМНИП, от того же автора, проксик между WebSockets и TCP sockets — wsproxy.

А любители счастья хотели уровнем выше. HTTP вместо TCP.

Теоретически такое реально. Практически - что-то не вкуриваю, как изящно сессии разруливать, и не городить кастомных лисапедов типа «nginx-websockets-plus».

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

Ну те же йайсы, но на джаваскрипте. У набигателей на ноду мания такая, все на JS переписывать.

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

Ну их, богатых, не поймешь...

... Это я про любителей счастья. Тут на первой странице один ажно с pptp начал сравнивать и пофигу что уровни модели (как TCP, так и ISO/OSI) разные. Я тут уже ни чему не удивляюсь.

А фишка с проксиком проста — там подразумевается что в качестве сервера используется не nginx (не к ночи будь помянут из-за своего столь изящно неописанного API), а некое приложение, самостоятельно работающее с WebSockets при помощи libwebsockets. Данная либа по сути дела, для «standalone серверов». В таком случае, к такому серверу (например) можно будет подцепляться по plain TCP через wsproxy, но при этом сам сервер будет работать с WebSockets. Не фонтан, т.к. Вы абсолютно правильно заметили что упаковки данных там нет и пока не ясно будет ли, ибо это решение для специфичных случаев. Но тоже вроде как работает. При таком подходе nginx становится вроде как лишним. Как это будет работать с NAT'ами я сказать пока не могу — не тестировал еще.

anonymous ()
Ответ на: Ну их, богатых, не поймешь... от anonymous

Не-не-не, девидблейн. По условиям задачи надо не nginx выпилить, а все кроме него (stunnel, haproxy).

На nginx очень удобно лепить подобие хитрых фаерволов, вести логи и разливать статику. За это nginx очень любят втыкать практически во все продакшены. Раньше, когда сайту надо было использовать вебсокеты, одним nginx было не вывернуться. Теперь можно. И это гуд.

Vit ★★★★★ ()

Зашибись! А я как-раз занимался поисками подходящего костыля.

drull ★☆☆☆ ()
Ответ на: комментарий от sv75

Судя по этому определению, оно не нужно >_<

Живешь в эпохе web1.0? Срочно чини криокамеру.

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

Да веб технологии-игрушка не более,ни для чего серьезного не годиться.

Скажи это гуглу.

drull ★☆☆☆ ()
Ответ на: комментарий от ComradeDOS

Выходит, что у тебя бакэнд всё равно должен реализовывать WebSocket'ы. Так не интересно...

Естественно. А ты хочешь чтобы нжинкс и логику его работы за тебя реализовал?

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

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

Но это, к сожалению, кастомный модуль, который вряд ли когда либо включат в nginx.

Vit ★★★★★ ()
Последнее исправление: Vit (всего исправлений: 1)
Ответ на: комментарий от anti_social

SockJS - низкоуровневый конструктор. Этого мало. Плюс, он намного менее распространен, поэтому не собрать отзывы с реальных толстых продакшенов.

В общем, я пока пешком постою. Через пол годика наверняка что-нибудь допилят до юзабельного состояния - socket.io, faye, sock.js. Запарило уже экспериментировать.

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

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

Да, было бы неплохо.

drull ★☆☆☆ ()
Ответ на: комментарий от anonymous_

SSE реализуется через полинг или лонг полинг. Это не то же самое в плане производительности.

ComradeDOS ()
Ответ на: комментарий от ForwardToMars

Имелось в виду именно проксирование через WebSocket'ы стандартного протокола вроде HTTP.

ComradeDOS ()
Ответ на: комментарий от anonymous_

Я был не прав. Нынче все браузеры (за исключением IE) поддерживают API для SSE, но спецификация до сих пор в состоянии черновика в отличии от WebSocket'ов, которые уже стандартизованы.

ComradeDOS ()
Ответ на: комментарий от drull

Скажи это гуглу

когда профит от «веб-технологий» составит хотя бы 5% в структуре доходов google, тогда и будет о чем говорить

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

Собственно говоря, вы почти все обсудили...

... я только немного от себя добавлю.

В том-то и дело что вебсокеты именно в самом сервере на фиг не убились. По моему мнению. Ну судите сами. Следите за руками... )))

Предположим, у Вас есть некий веб-чатиг. У Вас есть для него клиент. Отлично! Но на стороне сервера Вам придется как-то обеспечить поддержку этого веб-чатига. Т.е., то что приходит с машины пивососа-манагера надо транслировать (через сервер) на машину другого пивососа-манагера. Если машин две, то нагрузка на сервер невелика и говорить тут не о чем. Если к этим манагерам присоединится еще секретутка и бюстгалтерия подтянется, то все становится несколько более грустно в части нагрузки на сервер. У нас же веб-сервер, на котором еще какое-нибудь быдлоподелие типа битрикса или недомагазинчега крутится? Так что, ресурсы там кушаются довольно быстро и беспредельно.

В итоге, конечно, лучше было бы реализовать серверную логику этого веб-чатига отдельно от основного веб-сервера, с применением стандартного TCP, но через wsproxy обеспечить работу по WebSockets. Да, на похапе/js это врядли реализуемо, но на С вполне возможно. Такой сервер чатига можно поставить в случае необходимости поодаль. По крайней мере, разгрузив тем самым основной веб-сервер. Но... Россия... мать еë. Не осилим. )))

Скорее напишем еще на похапях или языке Ребе еще 1000 и 1 очередной чатиг (почти уверен что большая часть создателей «серьезных фреймворков» на похапе этим либо уже занята, либо будет заниматься в ближайшее время) и дружно будем фигеть от того, что даже nginx зверски тормозит. Тут другой коллега-анонимус метко заметил что теперь nginx будет еще удобнее досить. Он прав. Он очень сильно прав. Поверьте. :) Хотите Вы того или нет, но отвязывать реализации приложений с websockets от собственно веб-сервера придется. ;) Собственно, по этой причине я и оставил здесь упоминание и о libwebsockets и о wsproxy. Может, кому сгодится.

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

Простите! А Вы не могли бы...

... подсказать адрес Начальника Интенетов? Я ему челобитную подать желаю. Чтоб указ издал, дабы немедля поделить 2.0 в Web на 2? А то заходишь на сайт какой-нибудь, а там сплошной вебдваноль, но и информации тоже... ноль. «Мокрые столы», кнопки со скругленными краями, css по полной программе, кругом все выезжает и крутится, какая-то херь типа чатига «мы на связи» (хохмы ради попробовал раз туда стукнуться, засек время... через 7 минут оно да... оказалось на связи... но донельзя бестолковое, как выяснилось, так что закрыл с отвращением)? Или это я Господа прогневил чем-то и мне вот так просто звиздец как хронически не везет? И да, если я не ошибаюсь, то все это на ЛОР называется свисто-перделками? Я вот думаю — если я Начальнику Интернетов отпишу про то, чтобы эти свисто-перделки он отменил, он меня поймет? :)))

/* Пока Вы будете отвечать на мой вопрос (если конечно будете), я тут, в своей уютненькой криокамере посижу. Текстовушечку почитаю... Да поудивляюсь как же RFC без «мокрых столов» и прочей погребени писать умудрялись? ;) */

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

Всё, кажется, разобрался, это просто брокер, через которые пиры договариваются о p2p связи, типа трекера в торрентах. А так, действительно, ходит через p2p.

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

А что может пойти не так?

Ээээ... Сам я не очень разбираюсь в вебе. Я выложу копипасту с википедии.

В конце ноября 2010 Adam Barth опубликовал результаты исследования надежности используемого протокола. По его результатам выяснилось, что в случае использования прозрачных прокси-серверов, возможна подмена кеша передаваемых данных с тем, что пользователи вместо реальных данных будут получать версию данных от злоумышленника. Проблема оказалась достаточно серьёзной для того, чтобы разработчики Firefox и Opera объявили о том, что в будущих версиях их браузеров поддержка веб-сокетов будет по умолчанию отключена вплоть до устранения проблемы небезопасности данного протокола (хотя осталась возможность их включить).

pathfinder ★★★ ()
Ответ на: Простите! А Вы не могли бы... от anonymous

Недостаток оригинального контента не имеет отношения к свистоперделкам, это отдельная проблема и к теме отношения не имеет. Да и свистоперделки эти не только свистят и пердят. Куда удобнее и быстрее подгружать запрашиваемую информацию через тот же аякс, чем обновлять страницу полностью.

А красивости вроде цсс3 просто радуют глаз. Ну иногда не радуют. Это от дизайнера зависит. Вырвиглазие можно и в стиле web1.0 сделать. Аналогия: зачем сидеть на голой консоли, если кеды или гном куда приятнее для глаза?

drull ★☆☆☆ ()
Ответ на: комментарий от ComradeDOS

протокол HTTP не подразумевает соединения по инициативе сервера. Если ты имеешь ввиду логпулинг - один раз сделали соединение, а потом долго делаем вид, что отдаём данные - то в чем профит-то? Прикрутить вебсокеты, потому что модно, а сделать всё равно криво?

ForwardToMars ()
Ответ на: комментарий от drull

Все проще...

... Если «аффтарам» нефига сказать, то лучше бы им промолчать. А то получается что нам предлагают информационную пустоту, отрывающую мое или Ваше бесценное время на развертывание посвистывающей и попердывающей упаковки этой самой пустоты. Если попросту, то Вы подгружаете сайт, начинаете знакомиться с содержимым. А содержимого просто нет. Или оно есть, но лучшебы его не было. Во времена веб 1.0, я сваливал с такого сайта быстрее, чем во времена веб 2.0 просто потому, что диагноз автору сайта выставлялся в разы быстрее. Дурь была видна сразу.

Веб 1.0 отлично справлялся с задачей, для которой он создавался — обмен нформацией, приведенной к единообразному виду. Веб 2.0 подразумевает что каждый сайт является неповторимым и нетленным творением. Одна херня — Тицианами или Рафаэлями Де Санти у «всех» быть не получится.

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

anonymous ()
Ответ на: Все проще... от anonymous

Re: Все проще...

... Прошу прощения. Забыл.

Про Gnome/terminal. Я не знаю как там в KDE, у меня лично Gnome3 нормально в генточке используется. Так знаете что я чаще всего использую по Alt+F2? Вы угадали — gnome-terminal. :))) Знаете почему? Да потому что там проще решаются именно повседневные задачи. Ну да, для pdf/web/документов я использую соотв. программы. Но большую часть времени провожу именно в терминале. Формально подходя, мне что Gnome3, что KDE, что XFCE. Пофиг. Просто лично меня Gnome3 напрягает меньше всего.

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