LINUX.ORG.RU

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


0

2

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

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

☆☆☆☆☆

В общем, скачал я модули к апачу здесь. Установил их. Тесты работают. Но сами тесты - модули апача. А как сделать свое - непонятно.

Я-то думал, все будет так же элементарно, как с CGI, с той лишь разницей, что нужно будет создать сокет для общения CGI и клиента...

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

Тест (модуль для апача) работает. Остается понять, как подключить свое, не создавая модуль для апача.

Это не подойдёт?

Нет, это - самостоятельный сервер, слушающий вебсокеты. А у меня в качестве сервера работает апач.

Eddy_Em ☆☆☆☆☆
() автор топика

Оно, не? http://habrahabr.ru/blogs/webdev/82140/

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

karbofos
()

nginx + spawn-fcgi и нахер ненужен ваш апач :3

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

Не оно, конечно.

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

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

Чтобы поддерживать неопределенное время (часы, дни, недели...) соединение с клиентом.

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

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

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

Так что-то же должно слушать порт, чтобы получить это самое:

по веб-запросу от клиента

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

karbofos
()

Вкратце дополню. Мысль такая: клиент осуществляет соединение с сервером посредством обычного POST-запроса на обычный сишный CGI. В ответ приходит адрес, по которому клиент может открыть вебсокет для соединения с сервером. Далее все изменения в управлении железяками клиент производит через вебсокеты, через них же в почти реальном времени ему приходят сообщения.

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

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

_________

//wfrr

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

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

_________

//wfrr

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

Так что-то же должно слушать порт, чтобы получить это самое:

по веб-запросу от клиента

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

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

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

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

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

Eddy_Em ☆☆☆☆☆
() автор топика

Как всегда, хочется помучаться и использовать что-то неподдерживаемое?)

Используй comet, стабильнее вебсокетов, работа с ним намного проще как на клиенте, так и на сервере.

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

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

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

Вебсокеты вот вот будут стандартизированы. А comet - какой-то убогий костыль, не лучше флешь.

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

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

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

_________

//wfrr

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

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

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

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

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

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

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

А где же еще? Гугл + википедия.

Можно подумать, ты информацию о свежих технологиях каким-то другим способом получаешь =)

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

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

_________

//wfrr

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

>информацию о свежих технологиях каким-то другим способом получаешь =)

я их придумываю

_________

//wfrr

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

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

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

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

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

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

Огромная просьба не флудить!

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от 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 ☆☆☆☆☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.