http2http proxy, на чём писать, с чего начать?

sergey_m

1) Хочется написать приложение, которое будет транслировать один протокол работающий поверх http в другой. Какой порекомендуете язык, библиотеки?
2) В клиентской стороне приложения вероятно потребуется выполнять js, для того, чтобы вычислять правильные значения куков. Существуют ли интерпретаторы js не в броузерах, а в виде библиотек?

Helga87

2) В клиентской стороне приложения вероятно потребуется выполнять js, для того, чтобы вычислять правильные значения куков. Существуют ли интерпретаторы js не в броузерах, а в виде библиотек?
очень легко встраивать в свою программу V8, если это программа на C++.
http://code.google.com/apis/v8/embed.html

pilot

Существуют ли интерпретаторы js не в броузерах, а в виде библиотек?
http://www.mozilla.org/js/spidermonkey/
Чем не подошло?

katrin2201

Хочется написать приложение, которое будет транслировать один протокол работающий поверх http в другой. Какой порекомендуете язык, библиотеки?
Зависит от того, насколько хочется заморочиться. Если синхоронной работы с сокетами будет достаточно, то я думаю примерно монопенисуально - брать самый знакомый язык и гуглить/спрашивать под него.
В случае джавы я бы в качестве хттпклиента взял апачевский httpclient, в качестве сервера попробовал бы сановский httpserver.
Если же нужны глупости вроде асинхронности, лоад-балансинга, итп, то, возможно, стоит заморочиться например написав модуль к nginx.

sergey_m

Я уже подумал об этом до того, как предложил . И не потому что нужна производительность, просто Це - единственный язык, который я знаю :o Но в поставленной задаче между протоколами совершенно нет позапросного соответствия, поэтому nginx не получится. Сысоев подтвердил.

Dasar

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

sergey_m

Для себя и ещё нескольких человек, производительность не важна, денег нет, под FreeBSD. js нужен потому, что куки вычисляется jsом, для того, чтобы отличать броузеры от роботов.

Sharp

один протокол работающий поверх http в другой
То есть протокол "один" обращается к серверу по http (т.е. используя методы GET и POST) и передает какую-то свою информацию, а сервер в ответ на это что-то делает по другому протоколу и отвечает не html страничкой, а чем-то своим?
Тогда это cgi, приложение можно писать на чем угодно: можно на C, а можно на Perl-е, благо для последнего есть куча разнообразных библиотек.
Ну или есть чуть больше конкретики, то это может быть AJAX, писать тоже на чем угодно.

Dasar

Для себя и ещё нескольких человек, производительность не важна, денег нет, под FreeBSD. js нужен потому, что куки вычисляется jsом, для того, чтобы отличать броузеры от роботов.
поддерживаю -а: apache+cgi(fastcgi)+php/python/perl/c++
ps
кстати я правильно понял, что требуется две вещи ?:
хранить состояние между запросами
уметь делать запрос при отсутствии внешнего запроса

sergey_m

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

Marinavo_0507

хранить состояние между запросами
уметь делать запрос при отсутствии внешнего запроса
самый тупой способ для первого - ФС или БД
для второго - демона на том же языке (для удобства, чтоб использовать общий код, при необходимости можно его запускать, форканув обработчие cgi)

Dasar

Да, примерно так. И как эти две вещи лучше всего сделать в cgi?
в cgi - едва ли, т.к. там считается, что мы на каждый запрос новый процесс поднимаем
а вот в fastcgi проблем уже должно быть меньше, т.к. там один и тот же процесс используется между запросами.
состояние храним в глобальных переменных
а для heartbeat-а подпнимаем или отдельный тред (здесь плаваю так как никогда такое в fastcgi не делал или внешний процесс
ps
кстати nginx зря рано списали, fastcgi у него есть, а heartbeat всегда можно и внешне организовать (крутится демон, который периодически пинает nginx)

katrin2201

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

Dasar

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

conv3rsje

Да, примерно так. И как эти две вещи лучше всего сделать в cgi?
Посмотри на wsgi (pep-0333)
Stateful, простой, правда с куками я там не ковырялся, но, думаю, все нормально

Sharp

Прям в самом cgi это не сделаешь, но на cgi делаешь всего-лишь интерфейс ввода-вывода, состояния хранишь в какой-нить БД, "самостоятельность" делаешь другим скриптом/программой, которая может, например, анализировать какие-нить поля в вышеобозначенной БД, в зависимости от них что-то делать, а результат опять же заносить в БД. В последствие этот результат из БД ты покажешь пользователю через cgi.
Вообще, все это вместе называется Web 2.0 — когда ты через http делаешь все что угодно. Сейчас все так делают, даже непонятно как живущий Рамблер недавно разродился проектом http://myrambler.ru — открываешь по http, виджеты на странице двигаешь как хочешь, в следующий раз там и останутся (хранение состояния между запросами погоду/курсы валют сам обновляет (запрос при отсутствии внешнего запроса).
Тебе, я думаю, такого не надо, состояния можно хранить просто в каком-нить MySQL, а запросы отправлять просто из cron-а.

Marinavo_0507

Посмотри на wsgi (pep-0333)
Stateful, простой, правда с куками я там не ковырялся, но, думаю, все нормально
Что-то я не понял, чем это круче аналогичных библиотек для любого другого языка?

katrin2201

Меня смущает другое - если уж Глеб согласился с cgi'ем, то почему бы не пойти дальше и не взять любую современную платформу для построения веб-приложений?
PHP, Perl, Ruby on Rails, ASP.NET, Java Servlets, just name it...

conv3rsje

Что-то я не понял, чем это круче аналогичных библиотек для любого другого языка?
Тем что это 1) не библиотека (а скорее совет аналогичный "используй cgi") 2) удобно
Хотя можно колоться, и писать такую проксю на сях...
BTW Для сей вместо гемора с "фронтендами-бекендами-дазабанными" лучше посмотреть на что-то типа этого или хттп сервера в составе libev/libevent

Marinavo_0507

это 1) не библиотека (а скорее совет аналогичный "используй cgi") 2) удобно
Хотя можно колоться, и писать такую проксю на сях...
ну я не имел в виду си, а скорее перл(с которым глебиус знаком)/пхп/явы всякие

356ft85

не знаю в тему или нет, есть такой http/ftp/connect прокси, 3proxy.ru
Мне удавалось его пересобрать и внести кое какие изменения буквально за час. мб и тебе удастся сделать то что нужно

Werdna

1) Хочется написать приложение, которое будет транслировать один протокол работающий поверх http в другой. Какой порекомендуете язык, библиотеки?
Проще всего попросить грамотного чувака типа Бачана осилить и написать модуль нгинкса. Но, в принципе, это не самый лучший путь, лучше всего на libevent написать прокси.
Правильно ли я понимаю, что тебе надо тупо ловить запросы, проксировать, как-то обрабатывать ответ и отвечать? Если да — по идее нгинкса с фильтром кастомным должно хватить.
2) В клиентской стороне приложения вероятно потребуется выполнять js, для того, чтобы вычислять правильные значения куков. Существуют ли интерпретаторы js не в броузерах, а в виде библиотек?
Для начала нужно понять, что делать не надо:
Первое что делать не надо: Слушать тупых мудаков, которые насоветуют Явовские какие-нибудь библиотеки, они ещё сишарп насоветуют. Работать если будет — с аццкими тормозами.
Второе что делать не надо: Использовать код Мозиллы. Моя попытка использовать их чистый html-парсер не удалась. Просто потому что и сложно, и работает непонятно как. В итоге выплюнули и написали свой.
Теперь что нужно:
Для начала сформулировать задачу. Что именно ты хочешь, какая конечная цель.

Werdna

Ща тред пречитал.
Скорее всего тебе нужно заюзать curl, он запросы делать будет. Приложение обычно cgi делаешь, ну а чтобы мужду запросами хранить инфу — просто сделай fastcgi, самый простой способ я считаю.
Если входящих запросов много может быть, и зависать на делании запросов не кошерно, — libevent, и дальше пишешь ручками сам. Кстати, curl + libevent у нас работает мегакруто.

yroslavasako

которые насоветуют Явовские какие-нибудь библиотеки, Работать если будет — с аццкими тормозами.
Предубеждение. Ява для сервлетов идеальна. В меру мощная, в меру быстрая.

tokuchu

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

yroslavasako

можно писать на плюсах. Но выигрыш в производительности вряд ли покроет дополнительные сложности с написание программ на системном языке программирования.
update: То бишь я не вполне верно использую термин. Я думал, что сервлет - это лёгкий сервер-фреймворк, чуть сложнее inetd, и возможность прописать всю функциональность на языке программирования. Оказалось, что я неверно трактовал название.

sergey_m

Как ни странно смотрю в сторону java, потому что найдено готовое open source приложение на java, которое делает 50% того, что мне нужно. Оно реализует протокол с серверной стороны. Причём оно рабочее. Я вообще программировать не умею и у меня намного быстрее получается работать, когда я переделываю что-то рабочее, пусть даже капитально. Когда что-то делаю с нуля, то туплю очень долго. Как избавиться от такой тупизны - отдельный вопрос. Так что встаёт вопрос: чего бы почитать полному ламеру о Java? Опыта работы с объектами - нуль. Простите мне эту измену, фанаты низкоуровневых языков. :)
Да, на производительность насрать абсолютно, т.к. клиент будет обычно один. :)

yroslavasako

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

Papazyan

Ява вообще сделана так, чтобы и дауны могли на ней писать.
В свое время не пользуясь книгами и не зная ее вообще написал даунлоадер таблицы в файл из Оракла за денек.

Dasar

с использованием объектов проблем не должно быть - т.к. использование объектов есть всегда, даже в низкоуровневых языках (только там обычно это называют чем-то другим, чем словом "объект").
Основные сложности бывают - если в программе необходимо создавать свои классы - именно здесь часто проявляются ошибки в виде "плавания против течения ООП" и "плевания против ветра ООП" . Причем ошибки обычно не критичны - они лишь проявляются в излишнем запутывании кода.
в твоей задаче новых классов почти совсем делать не надо, поэтому особых проблем у тебя не дожно быть.
стоит разобраться со следующими вещами:
события
интерфейсы
виртуальные функции
generic-и (если они используется в том коде, который ты нашел)
особенности именования классов, переменных и т.д.
особенности в развертывании java-результата

katrin2201

Так что встаёт вопрос: чего бы почитать полному ламеру о Java?
Попробуй листать по диагонали Bruce Ekkel - Thinking in Java.
Еще неплохо проглядеть Antipatterns in Java для примеров того, как не надо кодить. Линк с ходу не дам, если заинтересует - нагуглю.

ark21

если уж про си заговорили то я бы посоветовал
http://www.pion.org/projects/pion-network-library
libevent конечно работает тоже, но он убог немного по интерфейсу и качеству исходного кода.

conv3rsje

но он убог немного по интерфейсу
очень субъективно
мне libevent и libev понравились (второй лучше а буст меня ввергает в депрессию

sergey_m

И в итоге накалякал на перле. Всем спасибо :)

slonishka

все правильно сделал!

sergey_m

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

ava3443

как вариант - подключать через perl xs своё расширение на С, в котором использовать Google V8 Javascript engine
Оставить комментарий
Имя или ник:
Комментарий: