-
Здравствуйте!
Очень прошу совета :)
Ситуация --------- Мне нужно на время публичного тестирования организовать сервер лицензирования. Суть сервера - ему задается вопрос (16 байт), он дает ответ (тоже 16 байт). Суть в том, что вопросов много, ответов много. Без верных ответов программа работать не будет.
Криптования транспорта не требуется - вопросов несколько сот тысяч. За разумное время они не смогут все залогировать и создать эмулятор (а от брутфорса я защищусь).
Сделать мне это нужно за 1 день (за завтра) :)
Что у меня есть --------------- 1. Есть самописный сервер TCP/IP. Он, скотина, медленный так как с серьезным криптованием и обфускацией трафика. 2. Есть функция преобразования (те самые, к которым обращается клиент). Фунция писана на дельфи.
Что хочу --------- Хочу легковесное решение, которые бы ходило через всякие проксики и пр. Желательно, чтобы не требовало открытия у клиента дополнительный портов (некоторые тестеры будут под ISA и проксями всякими). Можно (вернее, предпочтительно) HTTP запрос.
Как собираюсь делать --------------------- Клиент: На клиенте можно использовать что-то из стандартной библиотеки WinINet (напирмер, HttpOpenRequest, пример видел у Розыча, разберусь, одним словом).
Сервер: Не знаю :) Нужно быстро за один день наваять простейший HTTP сервер - 16 байт получил, провел вычисление, 16 байт отдал.
Чем лучше реализовать? Посоветуйте, пожалуйста.
-
http протокол + post запросы + шифрование прикладных данных содержащихся в пост запросах
-
> http протокол + post запросы + шифрование прикладных данных > содержащихся в пост запросах
я эта, как последний студент (кстати, сессия) спрошу - а подробнее можно? ну типа сервер то чем лучше сделать? компонент какой?
ЗЫ шифрование не нужно - анализировать трафик смысла нет.
-
Да любой. тот же TidHTTPServer или TidTCPServer + 10-20 минут писанины по превращаению его в http сервер
-
> компонент какой?
ICS
-
Что же до Indy - с его помощью сделать полноценный сервер (не имя опята в Indy) на порядок сложнее, чем на ICS.
-
э… LAMP+XySSL? %-)
--- Understanding is not required. Only obedience.
-
В итоге я решил копать ICS. Благо его TWSocketServer активно использую. Т.е. немного в теме.
Вообще евоный THttpServer подмывает своей доступностью: можно писать на дельфи полноценные веб-сервера! (или нельзя, пролейте свет). Когда я пытался изучать ИНДИ по переводу АП меня не покидало ощущение, что ИНДИ это как-то не очень хорошо. А вот ICS нравится очень.
ВОПРОС. Кто-нибудь пользует THttpServer серьезно? Сайты создает?
-
> DVM © (15.05.08 21:02)
Ты, я так понял, юзаешь ICS?
Я в THttpServer, видимо, не понял самого главного - как сделать в нем многопоточную работу?
Поясню. Если я должен отдать страницу в событии OnGetDocument, то как сделать так, чтобы несколько клиентов одновременно имели коннект и сервер для каждого клиента формировал свои страницы?
Я понимаю, что в событии OnGetDocument я могу стартануть поток, формирующий страницу. Но как потом ее отдать именно этому клиенту?
Поясни, пожалуйст :)
-
> Тимохов (17.05.08 00:14) [7] > > В итоге я решил копать ICS. Благо его TWSocketServer активно > использую. Т.е. немного в теме. > > Вообще евоный THttpServer подмывает своей доступностью: > можно писать на дельфи полноценные веб-сервера! (или нельзя, > пролейте свет). > Когда я пытался изучать ИНДИ по переводу АП меня не покидало > ощущение, что ИНДИ это как-то не очень хорошо. А вот ICS > нравится очень. >
Имхо, это лучший вариант для Дельфи.
-
> Тимохов (17.05.2008 01:09:08) [8]
Самое главное, что потоки ICS просто не нужны, хотя их можно и использовать.
-
> Anatoly Podgoretsky © (17.05.08 01:53) [10]
+1
-
> Anatoly Podgoretsky © (17.05.08 01:53) [10]
ну а все же - как в нем использовать многопоточность?
-
> Тимохов (17.05.08 02:01) [12] > > > > Anatoly Podgoretsky © (17.05.08 01:53) [10] > > > ну а все же - как в нем использовать многопоточность? >
Дим, а нужно ли в нём использовать многопоточность?
-
> Дим, а нужно ли в нём использовать многопоточность?
Поставь в OnGetDocument sleep(30000) (типа имитация долгого запроса к БД) и все остальные клиенты курят бамбук пока запрос не кончиться.
Поэтому мой ответ - НУЖНО.
-
Это тебе не Инди, для самого ICS потоки не нужно, здесь используется Event Driven Model, ты же не делаешь по одному потоку на каждую кнопку для формы? Ты посмотри примеры, они просветляют. Потоки могут потребоваться для других вещей, например для длительной обработки в базе. А ICS спокойно держит до 30000 одновременных соединений. Ты просто посторайся мыслить не в парадигме Юникс+Инди, а Windows+Delphi (у ICS таже модель, что и у всей Дельфи). Инди же это чужеродный для Виндоус путь.
-
> ну а все же - как в нем использовать многопоточность?
Как обычно создаешь поток, а в нем все компоненты, тут нет никаких особенностей, а вот проигрыш будет и сложность тоже.
-
Что такое асинхронные неблокирующие сокеты я знаю.
> Anatoly Podgoretsky © (17.05.08 11:19) [16] > > ну а все же - как в нем использовать многопоточность?Как > обычно создаешь поток, а в нем все компоненты, тут нет никаких > особенностей, а вот проигрыш будет и сложность тоже.
Вот смотри. Есть событие OnGetDocument. В нем нужно создать ответ. Пока один запрос не отработает, другой запрос обработан не будет. Так компонент устроен.
Ясное дело, что в OnGetDocument можно запустить поток и все такое.
ВОПРОС. Как по окончании отработки потока отдать клиенту результаты?
ЗЫ Такого примера там нет.
-
Тут суть то вот в чем. С докой у Пиетта не очень здорово. Некоторые компоненты не описаны. Видимо после отработки потока можно просто писать их в клиентский сокет? Типа такого Client.AnswerString(...) ? У него доки по такому подходу нет. В примерах я не нашел. Скажите, пожалуйста, если знаете ICS :)
-
> Тимохов (17.05.2008 20:43:18) [18]
У подавляющего большинстсва OpenSource или Freeware продуктов c документацией полный швах, для ICS пользуйся примерами или из поставки или 3d авторов. Количество просто гигантское.
|