LINUX.ORG.RU

web sockets, реализация на стороне сервера


0

2

Я хочу переписать некоторые свои веб-интерфейсы управления железяками с использованием вебсокетов. Примеры в интернете посмотрел - работают. Но никак не могу найти краткого изложения: что надо сделать на сервере, чтобы установить связь?

Итак, у меня есть сишная самописная CGI-библиотечка, как мне добавить туда поддержку вебсокетов?

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

Язык - естественно, С. Клиентов - один управляющий (т.к. больше одного нельзя), плюс сколько угодно read-only. Им вебсокеты не нужны.

Не закрывать соединение нельзя, т.к. ты, белк, и сам знаешь, что пока стандартное соединение не будет закрыто, клиент полученные данные обработать не сможет.

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

> что пока стандартное соединение не будет закрыто, клиент полученные данные обработать не сможет.
сможет, но это тоже костыль

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

>что пока стандартное соединение не будет закрыто, клиент полученные данные обработать не сможет.

В том и фишка веб сокетов, если ты не понял 8) иначе как ты представляешь себе «сервер» _послыает_ клиенту события, при том что соединение с клиентом сервер иницировать не может 8)

_________

//wfrr

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

Этот костыль и называется comet. И это никак не постоянное соединение, а постоянное дергание сервера и потоки кучи лишних данных.

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

Соединение, естественно, инициирует клиент. Сервер открывает вебсокет, который не закрывается вплоть до того, пока клиент не скажет «чаво-какаво»!

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

Вот я и почитал. Только что. Так что не надо обзывать comet асинхронным постоянным соединением.

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

Википедию ненадо распечатывать и курить, ее читать надо.

_________

//wfrr

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

Я имею в виду следующую схему: клиент получает адрес ws://траляля/блаблабла, открывает вебсокет по этому адресу, а на стороне сервера уже подготовленный CGI слушает.

Все элементарно. В теории. А как сделать - не понятно.

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

А это вообще не соединение, это принцип, позволяющий отправлять клиенту данные по запросу сервера.
Это не поллинг с интервалом.
Преимущества - работает даже в IE, работает через любые прокси, бесплатная устойчивость к потери связи.

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

Мне не нужны эти квази-асинхронные соединения, работающие только на мегабитных сетях! Мне нужно реальное асинхронное соединение, то бишь вебсокет.

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

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

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

Хочу улучшить веб-морду для работы с железом. В планах «посадить» на это спектрограф (и, может быть, метровый телескоп).

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

Ну хорошо, для потоковых данных комет не подходит.

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

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

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

Очень прошу сначала почитать то, что написано в самом верху, т.е. в теле темы.

Какой пых, какой питон?

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

> Очень прошу сначала почитать то, что написано в самом верху, т.е. в теле темы.

А, вот ты о чём. Как что? Берёшь доку к Апачу, смотришь как от него принимать соединения и как отдавать результат. Или в исходниках того же mod_php5 покопайся, посмотри как это происходит.

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

> как от него принимать соединения

В смысле, инициализированные клиентом. Он же их в соответствующие модули перенаправляет, которые и обрабатывают всё.

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

Было бы такое желание и пару месяцев отпуска, я бы здесь эту тему не поднимал :)

Я-то надеялся, что вдруг кто-нибудь уже с этими вебсокетами работал, через модули апача.

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

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

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

> Проблема лишь в том, что я не знаю, как оформить свой сервис не в виде модуля апача, чтобы все это реализовать.

Ты же сам говоришь, что тебе надо чтоб работало под управлением Апача, т. е. самостоятельная прослушка портов в твоём коде тебе не нужна. А как иначе-то сделать?

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

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

А оказывается, не все так легко...

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

осмелюсь предположить что никто до сих пор не понял зачем сокет открывать и зачем его закрывать, ты из 90х выбрался со своим сишным КГИ и просишь нас не флудить а сам башню включить совсем не хочешь, ну совсем, прости уж за резкость

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

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

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

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

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

но почему апач?

Nginx мне не нравится. Дохловатый какой-то.

нормальные люди давно его не используют

Ога =)

зачем по запросу какой-то модуль подключать а затем отключать причем вообще не ясно какой

Я уже все разъяснил: модуль апача (который уже есть) занимается обработкой установки соединения через вебсокеты. Но я не хочу каждый управляющий процесс делать модулем апача. А хочу, чтобы они работали в качестве демонов, общаясь с клиентом посредством передачи данных через какой-нибудь сокет, работу которого и будет обеспечивать апач.

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

ну ок есть демон, демон слушает сокет, но причем тут апач и почему он должен этот демон запускать? ты часто видел что бы апач запускал демонов? честно?

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

> ginx мне не нравится. Дохловатый какой-т

хорошо когда пишешь академичный софт управления метровым телескопом для одного астронома...

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

в голову приходит только одна мысль, тебе хочется что бы ВСЕМ ЧТО ВЕБ РУЛИЛ АПАЧ, но это дружок уже АПАЧ ГОЛОВНОГО МОЗГА

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

ты часто видел что бы апач запускал демонов? честно?

У меня он этим как раз и занимается (клиент подключается, проходит аутентификацию, запускает демона, затем отправляет запросы на состояние и изменение параметров, а демон работает, пока его не отключат).

хорошо когда пишешь академичный софт управления метровым телескопом для одного астронома...

Если бы нужна была высокая нагрузка, я, понятное дело, перешел бы на что-нибудь легкое и шустрое.

тебе хочется что бы ВСЕМ ЧТО ВЕБ РУЛИЛ АПАЧ, но это дружок уже АПАЧ ГОЛОВНОГО МОЗГА

Нет, дружок, это рациональное разделение обязанностей. Зачем мне писать свой собственный веб-сервер, если есть апач?

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

Если бы нужна была высокая нагрузка, я, понятное дело, перешел бы на что-нибудь легкое и шустрое.

Хотя нет. Все равно бы апачем пользовался: у нас канал наружу около 50-100кбит/с. Так что, апач тормозить не будет :)

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

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

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

засядут на них, ничего не делая, в ожидании таймаута,

короткий таймаут и всё.

автор все верно написал, очень жду развязки

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

Нжинкс не будет, ну, по крайней мере, не на таком малом количестве коннектов, как апач - у апача пул, что заставляет тех, кто последний, ждать своей очереди, пока те, кто первые, заняли весь пул апача. У нжинкса же лимит - грубо объем оперативы под открытые сокеты (или лимит открытых сокетов в ядре). Лайти тоже без пула работает. accf_http.ko тоже позволяет предотвратить влияние этого бага на апачах, но это оффтопик.

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

Короткий это сколько? 500? 250? 1000? Есть гарантия, что браузер всегда успеет доставить запрос до сервера в пределах таймаута?

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

> Есть гарантия, что браузер всегда успеет доставить запрос до сервера в пределах таймаута?

короткий - это пару минут

для highload, в настройках аккаунта выставлять скорость соединения, как на торрентах

плюс минимальные системные требования, latency не более чем. У кого более - отправляются менять провайдера.

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