http2http proxy, на чём писать, с чего начать?
2) В клиентской стороне приложения вероятно потребуется выполнять js, для того, чтобы вычислять правильные значения куков. Существуют ли интерпретаторы js не в броузерах, а в виде библиотек?очень легко встраивать в свою программу V8, если это программа на C++.
http://code.google.com/apis/v8/embed.html
Существуют ли интерпретаторы js не в броузерах, а в виде библиотек?http://www.mozilla.org/js/spidermonkey/
Чем не подошло?
Хочется написать приложение, которое будет транслировать один протокол работающий поверх http в другой. Какой порекомендуете язык, библиотеки?Зависит от того, насколько хочется заморочиться. Если синхоронной работы с сокетами будет достаточно, то я думаю примерно монопенисуально - брать самый знакомый язык и гуглить/спрашивать под него.
В случае джавы я бы в качестве хттпклиента взял апачевский httpclient, в качестве сервера попробовал бы сановский httpserver.
Если же нужны глупости вроде асинхронности, лоад-балансинга, итп, то, возможно, стоит заморочиться например написав модуль к nginx.
Я уже подумал об этом до того, как предложил . И не потому что нужна производительность, просто Це - единственный язык, который я знаю
Но в поставленной задаче между протоколами совершенно нет позапросного соответствия, поэтому nginx не получится. Сысоев подтвердил.
Но в поставленной задаче между протоколами совершенно нет позапросного соответствия, поэтому nginx не получится. Сысоев подтвердил.вопрос остался открытым: насколько ты хочешь заморочится?
это вещь для себя? на продажу?
какой бюджет по деньгам/времени планируется?
какое предполагается развертывание? на одну машину? на сеть? на мир?
использовать будешь сам? или кто-то сторонний?
какая пропускная способность нужна? кол-во трафика? кол-во запросов?
под какую платформу?
ps
кстати совсем не понял, как связан js и cookie? cookie же обычно ставятся без всякого js.
это вещь для себя? на продажу?
какой бюджет по деньгам/времени планируется?
какое предполагается развертывание? на одну машину? на сеть? на мир?
использовать будешь сам? или кто-то сторонний?
какая пропускная способность нужна? кол-во трафика? кол-во запросов?
под какую платформу?
ps
кстати совсем не понял, как связан js и cookie? cookie же обычно ставятся без всякого js.
Для себя и ещё нескольких человек, производительность не важна, денег нет, под FreeBSD. js нужен потому, что куки вычисляется jsом, для того, чтобы отличать броузеры от роботов.
один протокол работающий поверх http в другойТо есть протокол "один" обращается к серверу по http (т.е. используя методы GET и POST) и передает какую-то свою информацию, а сервер в ответ на это что-то делает по другому протоколу и отвечает не html страничкой, а чем-то своим?
Тогда это cgi, приложение можно писать на чем угодно: можно на C, а можно на Perl-е, благо для последнего есть куча разнообразных библиотек.
Ну или есть чуть больше конкретики, то это может быть AJAX, писать тоже на чем угодно.
Для себя и ещё нескольких человек, производительность не важна, денег нет, под FreeBSD. js нужен потому, что куки вычисляется jsом, для того, чтобы отличать броузеры от роботов.поддерживаю -а: apache+cgi(fastcgi)+php/python/perl/c++
ps
кстати я правильно понял, что требуется две вещи ?:
хранить состояние между запросами
уметь делать запрос при отсутствии внешнего запроса
кстати я правильно понял, что требуется две вещи ?:Да, примерно так. И как эти две вещи лучше всего сделать в cgi?
хранить состояние между запросами
уметь делать запрос при отсутствии внешнего запроса
хранить состояние между запросамисамый тупой способ для первого - ФС или БД
уметь делать запрос при отсутствии внешнего запроса
для второго - демона на том же языке (для удобства, чтоб использовать общий код, при необходимости можно его запускать, форканув обработчие cgi)
Да, примерно так. И как эти две вещи лучше всего сделать в cgi?в cgi - едва ли, т.к. там считается, что мы на каждый запрос новый процесс поднимаем
а вот в fastcgi проблем уже должно быть меньше, т.к. там один и тот же процесс используется между запросами.
состояние храним в глобальных переменных
а для heartbeat-а подпнимаем или отдельный тред (здесь плаваю так как никогда такое в fastcgi не делал или внешний процесс
ps
кстати nginx зря рано списали, fastcgi у него есть, а heartbeat всегда можно и внешне организовать (крутится демон, который периодически пинает nginx)
в cgi - едва ли, т.к. там считается, что мы на каждый запрос новый процесс поднимаемтак этот процесс может быть тупо прослойкой к реальному демону
так этот процесс может быть тупо прослойкой к реальному демонуможет, но меня смущает, что эту прослойку надо писать - т.е. фактически приходящие http-запросы сначала преобразуем в какие-то другие запросы к демону, где уже эти другие запросы поддерживаем
т.е. получается, вместо поддержки одного протокола (исходного) надо уже поддерживать два протокола: исходный и наш придуманный между http-сервером и демоном
Да, примерно так. И как эти две вещи лучше всего сделать в cgi?Посмотри на wsgi (pep-0333)
Stateful, простой, правда с куками я там не ковырялся, но, думаю, все нормально
Прям в самом cgi это не сделаешь, но на cgi делаешь всего-лишь интерфейс ввода-вывода, состояния хранишь в какой-нить БД, "самостоятельность" делаешь другим скриптом/программой, которая может, например, анализировать какие-нить поля в вышеобозначенной БД, в зависимости от них что-то делать, а результат опять же заносить в БД. В последствие этот результат из БД ты покажешь пользователю через cgi.
Вообще, все это вместе называется Web 2.0 — когда ты через http делаешь все что угодно. Сейчас все так делают, даже непонятно как живущий Рамблер недавно разродился проектом http://myrambler.ru — открываешь по http, виджеты на странице двигаешь как хочешь, в следующий раз там и останутся (хранение состояния между запросами погоду/курсы валют сам обновляет (запрос при отсутствии внешнего запроса).
Тебе, я думаю, такого не надо, состояния можно хранить просто в каком-нить MySQL, а запросы отправлять просто из cron-а.
Вообще, все это вместе называется Web 2.0 — когда ты через http делаешь все что угодно. Сейчас все так делают, даже непонятно как живущий Рамблер недавно разродился проектом http://myrambler.ru — открываешь по http, виджеты на странице двигаешь как хочешь, в следующий раз там и останутся (хранение состояния между запросами погоду/курсы валют сам обновляет (запрос при отсутствии внешнего запроса).
Тебе, я думаю, такого не надо, состояния можно хранить просто в каком-нить MySQL, а запросы отправлять просто из cron-а.
Посмотри на wsgi (pep-0333)Что-то я не понял, чем это круче аналогичных библиотек для любого другого языка?
Stateful, простой, правда с куками я там не ковырялся, но, думаю, все нормально
Меня смущает другое - если уж Глеб согласился с cgi'ем, то почему бы не пойти дальше и не взять любую современную платформу для построения веб-приложений?
PHP, Perl, Ruby on Rails, ASP.NET, Java Servlets, just name it...
PHP, Perl, Ruby on Rails, ASP.NET, Java Servlets, just name it...
Что-то я не понял, чем это круче аналогичных библиотек для любого другого языка?Тем что это 1) не библиотека (а скорее совет аналогичный "используй cgi") 2) удобно
Хотя можно колоться, и писать такую проксю на сях...
BTW Для сей вместо гемора с "фронтендами-бекендами-дазабанными" лучше посмотреть на что-то типа этого или хттп сервера в составе libev/libevent
это 1) не библиотека (а скорее совет аналогичный "используй cgi") 2) удобнону я не имел в виду си, а скорее перл(с которым глебиус знаком)/пхп/явы всякие
Хотя можно колоться, и писать такую проксю на сях...
не знаю в тему или нет, есть такой http/ftp/connect прокси, 3proxy.ru
Мне удавалось его пересобрать и внести кое какие изменения буквально за час. мб и тебе удастся сделать то что нужно
Мне удавалось его пересобрать и внести кое какие изменения буквально за час. мб и тебе удастся сделать то что нужно
1) Хочется написать приложение, которое будет транслировать один протокол работающий поверх http в другой. Какой порекомендуете язык, библиотеки?Проще всего попросить грамотного чувака типа Бачана осилить и написать модуль нгинкса. Но, в принципе, это не самый лучший путь, лучше всего на libevent написать прокси.
Правильно ли я понимаю, что тебе надо тупо ловить запросы, проксировать, как-то обрабатывать ответ и отвечать? Если да — по идее нгинкса с фильтром кастомным должно хватить.
2) В клиентской стороне приложения вероятно потребуется выполнять js, для того, чтобы вычислять правильные значения куков. Существуют ли интерпретаторы js не в броузерах, а в виде библиотек?Для начала нужно понять, что делать не надо:
Первое что делать не надо: Слушать тупых мудаков, которые насоветуют Явовские какие-нибудь библиотеки, они ещё сишарп насоветуют. Работать если будет — с аццкими тормозами.
Второе что делать не надо: Использовать код Мозиллы. Моя попытка использовать их чистый html-парсер не удалась. Просто потому что и сложно, и работает непонятно как. В итоге выплюнули и написали свой.
Теперь что нужно:
Для начала сформулировать задачу. Что именно ты хочешь, какая конечная цель.
Ща тред пречитал.
Скорее всего тебе нужно заюзать curl, он запросы делать будет. Приложение обычно cgi делаешь, ну а чтобы мужду запросами хранить инфу — просто сделай fastcgi, самый простой способ я считаю.
Если входящих запросов много может быть, и зависать на делании запросов не кошерно, — libevent, и дальше пишешь ручками сам. Кстати, curl + libevent у нас работает мегакруто.
Скорее всего тебе нужно заюзать curl, он запросы делать будет. Приложение обычно cgi делаешь, ну а чтобы мужду запросами хранить инфу — просто сделай fastcgi, самый простой способ я считаю.
Если входящих запросов много может быть, и зависать на делании запросов не кошерно, — libevent, и дальше пишешь ручками сам. Кстати, curl + libevent у нас работает мегакруто.
которые насоветуют Явовские какие-нибудь библиотеки, Работать если будет — с аццкими тормозами.Предубеждение. Ява для сервлетов идеальна. В меру мощная, в меру быстрая.
Ява для сервлетов идеальна.А сервлеты на чём-то ещё пишут? Это же вроде явовская терминология?
можно писать на плюсах. Но выигрыш в производительности вряд ли покроет дополнительные сложности с написание программ на системном языке программирования.
update: То бишь я не вполне верно использую термин. Я думал, что сервлет - это лёгкий сервер-фреймворк, чуть сложнее inetd, и возможность прописать всю функциональность на языке программирования. Оказалось, что я неверно трактовал название.
update: То бишь я не вполне верно использую термин. Я думал, что сервлет - это лёгкий сервер-фреймворк, чуть сложнее inetd, и возможность прописать всю функциональность на языке программирования. Оказалось, что я неверно трактовал название.
Как ни странно смотрю в сторону java, потому что найдено готовое open source приложение на java, которое делает 50% того, что мне нужно. Оно реализует протокол с серверной стороны. Причём оно рабочее. Я вообще программировать не умею и у меня намного быстрее получается работать, когда я переделываю что-то рабочее, пусть даже капитально. Когда что-то делаю с нуля, то туплю очень долго. Как избавиться от такой тупизны - отдельный вопрос. Так что встаёт вопрос: чего бы почитать полному ламеру о Java? Опыта работы с объектами - нуль. Простите мне эту измену, фанаты низкоуровневых языков. 
Да, на производительность насрать абсолютно, т.к. клиент будет обычно один.

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

Если имеешь представление об ООП - то можешь читать статью на интуите про яву. А вот как осваивать ООП - подсказать не могу, сам точно не знаю
Ява вообще сделана так, чтобы и дауны могли на ней писать.
В свое время не пользуясь книгами и не зная ее вообще написал даунлоадер таблицы в файл из Оракла за денек.
В свое время не пользуясь книгами и не зная ее вообще написал даунлоадер таблицы в файл из Оракла за денек.
с использованием объектов проблем не должно быть - т.к. использование объектов есть всегда, даже в низкоуровневых языках (только там обычно это называют чем-то другим, чем словом "объект").
Основные сложности бывают - если в программе необходимо создавать свои классы - именно здесь часто проявляются ошибки в виде "плавания против течения ООП" и "плевания против ветра ООП" . Причем ошибки обычно не критичны - они лишь проявляются в излишнем запутывании кода.
в твоей задаче новых классов почти совсем делать не надо, поэтому особых проблем у тебя не дожно быть.
стоит разобраться со следующими вещами:
события
интерфейсы
виртуальные функции
generic-и (если они используется в том коде, который ты нашел)
особенности именования классов, переменных и т.д.
особенности в развертывании java-результата
Основные сложности бывают - если в программе необходимо создавать свои классы - именно здесь часто проявляются ошибки в виде "плавания против течения ООП" и "плевания против ветра ООП" . Причем ошибки обычно не критичны - они лишь проявляются в излишнем запутывании кода.
в твоей задаче новых классов почти совсем делать не надо, поэтому особых проблем у тебя не дожно быть.
стоит разобраться со следующими вещами:
события
интерфейсы
виртуальные функции
generic-и (если они используется в том коде, который ты нашел)
особенности именования классов, переменных и т.д.
особенности в развертывании java-результата
Так что встаёт вопрос: чего бы почитать полному ламеру о Java?Попробуй листать по диагонали Bruce Ekkel - Thinking in Java.
Еще неплохо проглядеть Antipatterns in Java для примеров того, как не надо кодить. Линк с ходу не дам, если заинтересует - нагуглю.
если уж про си заговорили то я бы посоветовал
http://www.pion.org/projects/pion-network-library
libevent конечно работает тоже, но он убог немного по интерфейсу и качеству исходного кода.
http://www.pion.org/projects/pion-network-library
libevent конечно работает тоже, но он убог немного по интерфейсу и качеству исходного кода.
но он убог немного по интерфейсуочень субъективно
мне libevent и libev понравились (второй лучше а буст меня ввергает в депрессию
И в итоге накалякал на перле. Всем спасибо 

все правильно сделал!
Надо заметить, что js в текущей реализации пока не пригодился. Вот как понадобится, то хз чего делать с ним на перле.
как вариант - подключать через perl xs своё расширение на С, в котором использовать Google V8 Javascript engine
Оставить комментарий
sergey_m
1) Хочется написать приложение, которое будет транслировать один протокол работающий поверх http в другой. Какой порекомендуете язык, библиотеки?2) В клиентской стороне приложения вероятно потребуется выполнять js, для того, чтобы вычислять правильные значения куков. Существуют ли интерпретаторы js не в броузерах, а в виде библиотек?