Форум: "Прочее";
Текущий архив: 2015.09.10;
Скачать: [xml.tar.bz2];
Внизмаленький http Найти похожие ветки
← →
Dennis I. Komarov © (2014-11-12 23:00) [0]Господа!
Есть что-нить простенькое, маленькое внутри win, чтоб контент (xml) в http обернуть и в tcp отдать?
Или быстрее самому набросать?
P.S.
Без монстров аки Indy
← →
кгшз © (2014-11-12 23:21) [1]внутри вин есть иис
маленькое это http://nodejs.org/
простенькое это http://www.apache.org/
но ты набросаешь сам на инди
← →
Dennis I. Komarov © (2014-11-12 23:26) [2]Нет, инди тяжкий... Мне просто к хмл хттп хидер прилепить по-сути надо. Без динамики и прочей тяжести.
Вдруг в недрах wininet есть готовая функция.
← →
Rouse_ © (2014-11-12 23:51) [3]Готовой нема, нужно небольшой обвес написать.
Ну типа такого, только попричесанней: http://rouse.drkb.ru/network.php#proxyload
← →
Rouse_ © (2014-11-12 23:57) [4]В принципе попробуй завтра ко мне стукнутся, я попробую тебе дать наш вариант, там вообще просто, тупо данные и адрес куда отправлять. Но не до конца уверен что смогу целиком это выпилить, бо у нас там тоже все разраслось и выглядит как полноценное indy (только гораздо удобней).
rouse собака grandsmeta тут точка ru
← →
кгшз © (2014-11-13 00:00) [5]интересно причем здесь это, если ему сервер нужен.
← →
Rouse_ © (2014-11-13 00:04) [6]
> кгшз © (13.11.14 00:00) [5]
> интересно причем здесь это, если ему сервер нужен.
Я пока что не уверен что ему именно серверная реализация нужна, xml в обе стороны легко отдается, а по вопросу не понятно :)
Хотя если вопрос о сервере, тогда - да.
← →
кгшз © (2014-11-13 00:09) [7]по вопросу все предельно понятно.
чел хочет отдать контент по шттп на пришедший ему гет/пост.
← →
Dennis I. Komarov © (2014-11-13 00:19) [8]Саш, он прав :) Именно серверная
Что-то вроде:function XMLHttpRequest(var AContent: TStringList): Boolean;
var
HTTPContent: TStrings;
begin
HTTPContent:=TStringList.Create;
try
HTTPContent.Text := AContent.Text;
AContent.Clear;
AContent.Add("HTTP/1.1 200 OK");
AContent.Add("Server: Unknow");
AContent.Add("Accept-Ranges: bytes");
AContent.Add("Keep-Alive: timeout=5, max=100");
AContent.Add("Connection: Keep-Alive");
AContent.Add("Content-Type: text/xml");
AContent.Add("Content-Length: " + IntToStr(Length(HTTPContent.Text)));
AContent.Add("");
AContent.Add(HTTPContent.Text);
AContent.Add("");
finally
HTTPContent.Free
end;
end;
1. За голову не поручусь, сейчас RFC покурю немного
2. Надо с юникодом грабли поискать
← →
кгшз © (2014-11-13 00:20) [9]если же речь о получении xml контента,
то все делается и без этого некрокода в 7 килобайт исходников.
в две строки.
← →
кгшз © (2014-11-13 00:27) [10]ладно.
скажу как отдать статик http-контент не имея http сервера.
протокол res://
сервером служит exe/dll, а сам контент запихан в ресурсы
http://msdn.microsoft.com/en-us/library/aa767740(v=vs.85).aspx
при этом никакие тсп-порты никем не открываются
← →
Dennis I. Komarov © (2014-11-13 00:36) [11]1. получатель браузер
2. res:// это локально...
← →
кгшз © (2014-11-13 00:54) [12]ну естественно браузер.
res:// - это не локально, это из ресурса.
если ты странный, и не хочешь сервера, то файл должен быть на шаре.
что естественно
← →
Dennis I. Komarov © (2014-11-13 01:05) [13]Почему не хочу? мое приложение и есть сервер.
Получил http-запрос, вернул xml. В чем странность?
P.S.
о файлах речи не было
← →
кгшз © (2014-11-13 01:11) [14]если твое приложение сервер, то чего же ты еще хочешь?
или ты хочешь чтобы после того, как ты назвал свой project1.exe "сервером", он сам по себе научился быть http-сервером?
https://drive.google.com/file/d/0ByCA9Glz10r7bzdIRnJKcFpBeDg/view?usp=sharing
← →
Dennis I. Komarov © (2014-11-13 01:19) [15]Я в [0] написал что хочу, зачем фонтазировать глупости?
P.S.
XYZ не актуально
← →
кгшз © (2014-11-13 01:23) [16]тебя же не спрашивают, зачем ты фантазируешь на тему нет ли в винде чего нибудь волшебного умеющего быть http сервером
← →
кгшз © (2014-11-13 01:37) [17]Почему не хочу?
потому что инди ты не хочешь, а два сервера предложенных тебе - не помогли.
мое приложение и есть сервер.
твое приложение не сервер.
было бы оно сервером, ветки бы этой не было бы вообще.
P.S.
XYZ не актуально
ну я же говорил, что
но ты набросаешь сам на инди
← →
Eraser © (2014-11-13 02:28) [18]
> Dennis I. Komarov © (12.11.14 23:00)
Indy.
← →
Dennis I. Komarov © (2014-11-13 03:00) [19]
> Eraser © (13.11.14 02:28) [18]
Монстр :) Ковырялся я с ним давно, c POP3
Ну его в баню
← →
Dennis I. Komarov © (2014-11-13 03:03) [20]
> твое приложение не сервер.
> было бы оно сервером, ветки бы этой не было бы вообще.
>
Посерверело? )
procedure TForm1.TcpServer1Accept(Sender: TObject;
ClientSocket: TCustomIpClient);
var
recv: AnsiString;
HTTPContent: TStrings;
begin
repeat
recv:=ClientSocket.Receiveln;
until recv = "";
HTTPContent:=TStringList.Create;
try
HTTPContent.LoadFromFile("data.xml");
if XMLHttpRequest(HTTPContent) then
ClientSocket.Sendln(AnsiString(HTTPContent.Text));
finally
HTTPContent.Free;
end
end;
← →
Eraser © (2014-11-13 05:49) [21]
> Dennis I. Komarov © (13.11.14 03:00) [19]
> Ковырялся я с ним давно
ну это ж слов нет прямо ) был бы мой сотрудник - уже вещи бы собирал :-)
(на правах шутки...)
вот, ну прямо сложнейший кодprocedure TfmMain.HTTPServerCommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
sFileName: string;
begin
sFileName := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) +
"response.xml";
if not FileExists(sFileName) then
Exit;
AResponseInfo.ServeFile(AContext, sFileName);
end;
← →
Dennis I. Komarov © (2014-11-13 13:12) [22]
> Eraser © (13.11.14 05:49) [21]
Причем тут сложность этого кода?
← →
Slider007 © (2014-11-13 14:51) [23]http://www.rejetto.com/hfs/
Малюсенькая програмка без излишеств
← →
Dennis I. Komarov © (2014-11-13 15:13) [24]Да елки зеленые)))
Не нужен http-сервер мне, ни файловый, ни другой...
Мне вернуть надо xml-контент на клиента по http протоколу. Полная реализация всего http не нужна.
Инди засобой притащит кучу ненужного и тяжелого (и со своими глюками))
Спросил просто, нет ли в недрах винды готовой функции, можно без транспорта... Ну вдруг для SOAP или еще чего...
← →
кгшз © (2014-11-13 15:18) [25]он, когда ему говоришь, что, если не хочешь сервера ...., отвечает, "почему не хочу?"
а когда ему предлагаешь сервер, он говорит "я не хочу сервера".
Ну вдруг для SOAP или еще чего...
можешь успокоится.
нету там такого.
← →
Eraser © (2014-11-13 15:19) [26]
> Dennis I. Komarov © (13.11.14 15:13) [24]
> Инди засобой притащит кучу ненужного и тяжелого (и со своими
> глюками))
извиняюсь, но это бред.
VCL притащит за собой кучу ненужного и тяжелого.
пиши на ассемблере.
← →
Eraser © (2014-11-13 15:22) [27]вдогонку еще можно сказать, что код какого-нибудь доморещенного "простого" сокет компонента скорее всего не будет компилироваться ни под FMX, ни под 64x даже, и тем более, код на winapi.
← →
кгшз © (2014-11-13 15:24) [28]можно без транспорта.
ну если можно без транспорта, то
несколько writeln в stdout таки решат твои мучения.
ответ отдашь, но правда без транспорта.
но отдашь.
но без транспорта. ага.
надо же без транспорта было.
← →
Dennis I. Komarov © (2014-11-13 15:36) [29]
> кгшз © (13.11.14 15:18) [25]
Ну нету так нету, не сотрясай воздух...
← →
кгшз © (2014-11-13 15:39) [30]ну кто же виноват что кому-то на его простейший вопрос надо получить сотню ответов, чтобы таки наконец-то дошло.
я что ли?
← →
Dennis I. Komarov © (2014-11-13 15:40) [31]
> Eraser © (13.11.14 15:19) [26]
>
> > Dennis I. Komarov © (13.11.14 15:13) [24]
>
>
> > Инди засобой притащит кучу ненужного и тяжелого (и со
> своими
> > глюками))
>
> извиняюсь, но это бред.
> VCL притащит за собой кучу ненужного и тяжелого.
>
извини, но это не бред... по исходникам инди я находился уже...
я лучше через TTcpServer ручками)
← →
DVM © (2014-11-13 16:12) [32]
> Dennis I. Komarov © (13.11.14 15:13) [24]
> Да елки зеленые)))
>
> Не нужен http-сервер мне, ни файловый, ни другой...
> Мне вернуть надо xml-контент на клиента по http протоколу.
> Полная реализация всего http не нужна.
> Инди засобой притащит кучу ненужного и тяжелого (и со своими
> глюками))
Не может http сервер быть простым. Парсер http протокола - сложная вещь и тянет за собой множество других вещей как то кодировки, zip/gzip и это только парсер. А еще транспорт, который тянет за собой соеты/потоки и т.д. Да и не такой уж Indy монстр.
Самый простой вариант сделать http сервер ничего не программируя = это использовать кучу готовых микро серверов которые гуглятся по запросу "tiny http". Их реально тьма.
Самый правильный вариант - не встраивать в свою программу http сервер вообще, а использовать готовые, т.к. тогда твой софт будет масштабируемым и гибким.
Вот на паскале сервер: https://www.ritlabs.com/en/products/tinyweb/ (так себе)
← →
Inovet © (2014-11-13 19:21) [33]А про глубины Инди читал? В переводе АП, первая попавшаяся ссылка
http://nikipolskiy.ucoz.ru/book/glubiny_indy.pdf
← →
Dennis I. Komarov © (2014-11-13 19:42) [34]
> DVM © (13.11.14 16:12) [32]
Дим, привет!
Ну да, давай tomcat прикрутим, iis добавим)))
Не нужны тут все прелести http1.1
Возможно в перспективе придется GET распарсить, но не сложно...
← →
Dennis I. Komarov © (2014-11-13 19:47) [35]
> Inovet © (13.11.14 19:21) [33]
первая ссылка должны быть та, что с конференции "Сети" висит )
← →
DVM © (2014-11-13 21:59) [36]
> Dennis I. Komarov © (13.11.14 19:42) [34]
> Возможно в перспективе придется GET распарсить, но не сложно.
> ..
Если только строго фиксированный вид URL и такие же заголовки запроса и один метод GET. И один единственный клиент в единицу времени. Тогда относительно просто.
← →
DVM © (2014-11-13 22:06) [37]Вот в Linux системах создание http сервера для своей программы упрощается тем, что там есть как правило inetd и он может принимать на вход соединения на 80 порт и отдавать/получать данные на стандартный вход/выход любой программы, т.о с сетью даже работать не придется. Да и многопоточность не нужна, т.к. для каждого соединения будет запускаться отдельный процесс. Да и апач чаще всего там тоже есть.
В Windows тоже вобщем то давно встроен IIS, ISAPI или CGI приложение для него написать не сложно.
← →
Dennis I. Komarov © (2014-11-13 22:26) [38]
> Если только строго фиксированный вид URL и такие же заголовки
> запроса и один метод GET.
Для начала даже get не парсим, просто ждем окончания запроса #13#10
> И один единственный клиент в единицу времени.
А пофиг, хоть 1000...
← →
Dennis I. Komarov © (2014-11-13 23:44) [39]
> просто ждем окончания запроса #13#10
правильнее CRLF
← →
DVM © (2014-11-14 00:11) [40]
> Dennis I. Komarov © (13.11.14 22:26) [38]
> А пофиг, хоть 1000...
для множества клиентов код станет на порядок сложнее
← →
Dennis I. Komarov © (2014-11-14 00:19) [41]
> для множества клиентов код станет на порядок сложнее
а подробнее?
← →
кгшз © (2014-11-14 10:17) [42]тебе же еще вчера было пофик на 1000 входящих гетов.
зачем тебе подробнее?
← →
DVM © (2014-11-14 10:20) [43]
> Dennis I. Komarov © (14.11.14 00:19) [41]
Ну очевидно же:
Если клиент один, то весь код сервера прямолинейный:
1) Слушаем порт
2) Запрос на соединение
3) Соединяем
4) Ждем запроса
5) Обрабатываем запрос
6) Отправляем ответ
7) Отключаемся
8) GOTO 1)
Если клиент не один, то на шаге 2 надо либо поток отдельный создавать для обслуживания клиентского соединения (для блокирующих сокетов), либо форкать процесс (для линукса) либо еще как то оформлять процесс соединения с конкретным пользователем и поддерживать список таких соединений. Что разумеется требует гораздо больше кода.
← →
Dennis I. Komarov © (2014-11-14 13:45) [44]
> DVM © (14.11.14 10:20) [43]
TTcpServer в OnAccept создает свой поток на каждое подключение.
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2015.09.10;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.056 c