Ada_Ru форум

Обсуждение языка Ада

PHP and XSLT

Оставить новое сообщение

Сообщения

rainbow-2000
PHP and XSLT
2006-03-10 23:27:09

Друзья,

 

Скажите пожалуйста, а дружит ли Ada с php и xslt? Если у кого опыт такой есть, поделитесь пожалуйста.

 

Попробовал тут небольшой сервер с клиентом сделать на Ada и заодно решил посмотреть, как работает "штука" под названием AdaSockets (всё в Linux). Вроде работает, но похоже, что с командной строки воспринимает только имена, а айпишники упорно брать не хочет.

Да, наверное Interfaces.C - самый широко используемый в Ada пакет :) .

 

Алексей

rainbow-2000 wrote:

 

Попробовал тут небольшой сервер с клиентом сделать на Ada и заодно решил посмотреть, как работает "штука" под названием AdaSockets (всё в Linux). Вроде работает, но похоже, что с командной строки воспринимает только имена, а айпишники упорно брать не хочет.

А пакет GNAT.Sockets не пробовали? Он вырос на основе AdaSockets и сейчас широко используется в разных AdaCore-вских продуктах (например, GLADE и PolyORB).

 

PS. А какие требования к связи клиента и сервера? Может можно

использовать AWS/GLADE/PolyORB?

Vadim Godunko wrote:

rainbow-2000 wrote:

 

Попробовал тут небольшой сервер с клиентом сделать на Ada и заодно решил посмотреть, как работает "штука" под названием AdaSockets (всё в Linux). Вроде работает, но похоже, что с командной строки воспринимает только имена, а айпишники упорно брать не хочет.

 

А пакет GNAT.Sockets не пробовали? Он вырос на основе AdaSockets и

сейчас широко используется в разных AdaCore-вских продуктах (например,

GLADE и PolyORB).

 

Нет, GNAT.Sockets не пробовал. А что, он хорошо работает? Кто-то мне говорил, что GNAT.Sockets и AdaSockets вообще-то разные пакеты, но утверждать ничего не буду, потому что только начал с ними разбираться.

 

 

PS. А какие требования к связи клиента и сервера? Может можно

использовать AWS/GLADE/PolyORB?

 

 

Пока никаких. Обычный учебный эхо-сервер/клиент. Чисто попробовать, как такие вещи на Ada выглядят. А так планируется масштабируемый многоцелевой сервер на базе Unix/Linux для работы под о-о-очень серьёзной нагрузкой. Тут, кстати, сразу много вопросов может возникнуть, поскольку скорость и надёжность - самые критичные параметры. Официально вопрос об использовании Ada, естественно, не стоит, и всё планируется на C++. Это я тут "отпал от веры" :) : хочу просто прикинуть целесообразность использования Ada для таких целей.

 

 

Алексей

rainbow-2000 wrote:

 

Нет, GNAT.Sockets не пробовал. А что, он хорошо работает? Кто-то мне говорил, что GNAT.Sockets и AdaSockets вообще-то разные пакеты, но утверждать ничего не буду, потому что только начал с ними разбираться.

Первый предоставляет простой и удобный интерфейс. Работает более, чем хорошо. ;)

On Sat, Mar 11, 2006 at 09:27:09AM +1000, rainbow-2000 wrote:

Друзья,

 

Скажите пожалуйста, а дружит ли Ada с php и xslt? Если у кого опыт такой есть, поделитесь пожалуйста.

 

Про php не скажу ничего, про xslt:

Мы используем биндинг к libxml2, libxslt из проекта Gnome, под Linux и Windows. Есть еще биндинг к Sablotron, но я его давно не использовал.

http://www.ada-ru.org/files/xslt-20051128.zip

 

Попробовал тут небольшой сервер с клиентом сделать на Ada и заодно решил посмотреть, как работает "штука" под названием AdaSockets (всё в Linux). Вроде работает, но похоже, что с командной строки воспринимает только имена, а айпишники упорно брать не хочет.

Может где-то у вас вкралась ошибка, IMHO AdaSockets должен работать правильно...

 

По поводу сервера, в полный рост используем AWS, как базу для

middle-tier сервера, довольно быстр и надежен, рекомендую.

 

Да, наверное Interfaces.C - самый широко используемый в Ada пакет :) .

Эх, не всегда есть время все переписать на Аде 8-)

 

Алексей

--

Maxim Reznik

Maxim Reznik wrote:

 

Про php не скажу ничего, про xslt:

Мы используем биндинг к libxml2, libxslt из проекта Gnome, под Linux

и Windows. Есть еще биндинг к Sablotron, но я его давно не использовал.

 

http://www.ada-ru.org/files/xslt-20051128.zip

 

 

 

Спасибо, Максим. Буду смотреть.

 

Попробовал тут небольшой сервер с клиентом сделать на Ada и заодно решил посмотреть, как работает "штука" под названием AdaSockets (всё в Linux). Вроде работает, но похоже, что с командной строки воспринимает только имена, а айпишники упорно брать не хочет.

 

Может где-то у вас вкралась ошибка, IMHO AdaSockets должен работать

правильно...

 

Да, любая программа содержит ошибку :) Если программа не содержит ошибки, значит плохо проверяли или она неверно работает :)

 

Вот, собственно говоря, простенький тестовый код, который не работает, как положено (понимает только имена хостов, а не айпишники)

 

-- echo_client.adb - echo-client that uses TCP/IP communication

-- and takes port number and hostname as command line arguments

 

with Ada.Text_IO; use Ada.Text_IO;

with Ada.Command_Line; use Ada.Command_Line;

with Ada.Exceptions; use Ada.Exceptions;

with Ada.Streams; use Ada.Streams;

with Sockets.Stream_IO; use Sockets, Sockets.Stream_IO;

 

procedure Echo_Client is

---------------------------Declarations-------------------------------

Outgoing_Socket : Socket_FD;

Line : String (1..256);

Last : Natural;

---------------------------Echo_Client body---------------------------

begin

if Argument_Count /= 4 then

Raise_Exception (Constraint_Error'Identity,

"Usage: " & Command_Name &

" -n Host_Name -p Port_Number");

end if;

if Argument (1) /= "-n" or Argument (3) /= "-p" then

Raise_Exception (Data_Error'Identity,

"Usage: " & Command_Name &

" -n Host_Name -p Port_Number");

end if;

Sockets.Socket (Outgoing_Socket, PF_INET, SOCK_STREAM);

Sockets.Connect (Outgoing_Socket, (Argument(2)),

Positive'Value (Argument(4)));

Put_Line ("Enter a string: ");

Get_Line (Line, Last);

Sockets.Put_Line (Outgoing_Socket, Line (1..Last));

Sockets.Get_Line (Outgoing_Socket, Line, Last);

Put_Line ("Client received: " & Line (1..Last));

Sockets.Shutdown (Outgoing_Socket, Both);

end Echo_Client;

----------------------------------------------------------------------

 

Если тут что-то "криво" - выслушаю с удовольствием (я уже чувствую , что эксперты Ada Василий и Сергей разнесут мою программу "в пух и прах" :) (но так это и хорошо, на самом деле :) )

 

Там ещё сервер есть, но он точно такой же. Собственно говоря, вот output

(на одном term-е - клиент, а на другом, соответственно сервер)

 

Запуск №1 Используем localhost

 

(term сервера)

 

$ adaprogs/ada_tcp_ip/echo_server -p 8080

Waiting for new connection

New connection established

Server received: Hello, Alexey!

 

(term клиента)

 

$ adaprogs/ada_tcp_ip/echo_client -n localhost -p 8080

Enter a string:

Hello, Alexey!

Client received: Hello, Alexey!

 

Запуск №2 Используем 127.0.0.1

 

(term сервера)

 

$ adaprogs/ada_tcp_ip/echo_server -p 8080

Waiting for new connection

 

(term клиента)

$ adaprogs/ada_tcp_ip/echo_client -n 127.0.0.1 -p 8080

 

raised SOCKETS.SOCKET_ERROR : Connection failed (errno was 101)

 

Где тут глюк, который не даёт использовать с командной строки 127.0.0.1 , я пока не понял.

 

 

 

По поводу сервера, в полный рост используем AWS, как базу для

middle-tier сервера, довольно быстр и надежен, рекомендую.

 

Да, я думал об этом. Времени, правда, мало чтобы подробно разобраться как следует в его коде, но поверхностный просмотр не выявил вызова типа select и у меня возникло подозрение, что этот сервер не очень хорошо масштабируется.

 

 

Да, наверное Interfaces.C - самый широко используемый в Ada пакет :) .

 

 

Эх, не всегда есть время все переписать на Аде 8-)

 

Да, С/C++ будет жить долго :)

 

 

Алексей

On Mon, Mar 13, 2006 at 03:12:57PM +1000, rainbow-2000 wrote:

 

(term клиента)

$ adaprogs/ada_tcp_ip/echo_client -n 127.0.0.1 -p 8080

 

raised SOCKETS.SOCKET_ERROR : Connection failed (errno was 101)

 

Где тут глюк, который не даёт использовать с командной строки 127.0.0.1 , я пока не понял.

 

А у меня работает 8-). Правда сервер я запустил nc (Net Cat).

Я так понял это у тебя виндовс (у меня линукс)?

Надо глянуть, что такое ошибка 101

 

Я сразу тоже не смог запустить, т.к. сервер nc отвалился после первого коннекта (с localhost). Тупой совет - убедись, что запускаешь

клиента сразу *после* запуска серевера.

 

Если нужна помощь могу еще под виндой собрать. Можешь прислать

код сервера для чистоты эксперимента...

 

По поводу сервера, в полный рост используем AWS, как базу для

middle-tier сервера, довольно быстр и надежен, рекомендую.

 

Да, я думал об этом. Времени, правда, мало чтобы подробно разобраться как следует в его коде, но поверхностный просмотр не выявил вызова типа select и у меня возникло подозрение, что этот сервер не очень хорошо масштабируется.

 

 

Там есть неплохая документация...

По поводу маштабируемости, может Дима ответит подробнее, я помню

ф-ию Select поменяли на Poll, для которого мы делали эмуляцию

под виндой через Select-ы...

 

aws-net.adb:

RC := Thin.Poll (PFD'Address, 1, Timeout);

 

--

Maxim Reznik

Maxim Reznik wrote:

On Mon, Mar 13, 2006 at 03:12:57PM +1000, rainbow-2000 wrote:

 

 

(term клиента)

$ adaprogs/ada_tcp_ip/echo_client -n 127.0.0.1 -p 8080

 

raised SOCKETS.SOCKET_ERROR : Connection failed (errno was 101)

 

Где тут глюк, который не даёт использовать с командной строки 127.0.0.1 , я пока не понял.

 

 

А у меня работает 8-). Правда сервер я запустил nc (Net Cat).

Я так понял это у тебя виндовс (у меня линукс)?

 

Нет, винда мне не нужна. У меня Linux. Да, тоже надо будет с другим сервером попробовать.

 

Надо глянуть, что такое ошибка 101

 

А по-моему, это как раз и означает, что клиент сервера не видит.

 

Я сразу тоже не смог запустить, т.к. сервер nc отвалился после первого

коннекта (с localhost). Тупой совет - убедись, что запускаешь

клиента сразу *после* запуска серевера.

 

Нет, здесь что-то не так. Вот с функциями С проблем никаких. Работает при любом порядке запуска.

 

Если нужна помощь могу еще под виндой собрать. Можешь прислать

код сервера для чистоты эксперимента...

Я вообще работаю с Linux, но спасибо за предложение. Просто открыл два терминала и получил то что получил. У меня есть ещё одна мысль по этому поводу, надо будет её проверить.

 

По поводу сервера, в полный рост используем AWS, как базу для

middle-tier сервера, довольно быстр и надежен, рекомендую.

 

Да, я думал об этом. Времени, правда, мало чтобы подробно разобраться как следует в его коде, но поверхностный просмотр не выявил вызова типа select и у меня возникло подозрение, что этот сервер не очень хорошо масштабируется.

 

 

 

Там есть неплохая документация...

По поводу маштабируемости, может Дима ответит подробнее, я помню

ф-ию Select поменяли на Poll, для которого мы делали эмуляцию

под виндой через Select-ы...

 

aws-net.adb:

RC := Thin.Poll (PFD'Address, 1, Timeout);

 

А, спасибо, это уже лучше, но, насколько я понимаю, тут могут быть проблемы с переносимостью. Poll, кажется, есть не на всех nix-ах. Хочется, чтобы переносимость была максимальной и select в этом плане немного получше.

 

 

Алексей

rainbow-2000 wrote:

 

А, спасибо, это уже лучше, но, насколько я понимаю, тут могут быть проблемы с переносимостью. Poll, кажется, есть не на всех nix-ах. Хочется, чтобы переносимость была максимальной и select в этом плане немного получше.

 

Обычно select способен обслужить 16 .. 64 дескриптора. А poll - до 1024 и более ;)

On Fri, Mar 17, 2006 at 02:24:47AM +1000, rainbow-2000 wrote:

 

Нет, винда мне не нужна. У меня Linux. Да, тоже надо будет с другим сервером попробовать.

 

Надо глянуть, что такое ошибка 101

Ну тогда я пишу

cat aaa.c

main()

{

printf("%s", strerror(101));

}

gcc aaa.c

./a.out

Network is unreachable

 

А следующая идея запустить через strace, действительно странно

strace ./echo_client -n localhost -p 1234

....

connect(3, {sa_family=AF_INET, sin_port=htons(1234),

sin_addr=inet_addr("127.0.0.1")}, 16) = 0

 

А когда

strace ./echo_client -n 127.0.0.1 -p 1234

 

connect(3, {sa_family=AF_INET, sin_port=htons(1234),

sin_addr=inet_addr("0.0.0.0")}, 16) = 0

 

Поковырялся в дебагере, мне кажется, я понял в чем дело,

Там структура Sockets.Types.In_Addr возвращается из

C_Inet_Addr по ссылке, а в Си она возвращается по значению.

 

Так сразу и не скажу как это исправить.

 

По поводу маштабируемости, может Дима ответит подробнее, я помню ф-ию Select поменяли на Poll, для которого мы делали эмуляцию

под виндой через Select-ы...

 

aws-net.adb:

RC := Thin.Poll (PFD'Address, 1, Timeout);

 

А, спасибо, это уже лучше, но, насколько я понимаю, тут могут быть проблемы с переносимостью. Poll, кажется, есть не на всех nix-ах. Хочется, чтобы переносимость была максимальной и select в этом плане немного получше.

 

 

Ну так на то у нас и есть реализация Poll через Select.

 

--

Maxim Reznik

Vadim Godunko wrote:

 

>rainbow-2000 wrote:

 

 

>А, спасибо, это уже лучше, но, насколько я понимаю, тут могут быть >проблемы с переносимостью. Poll, кажется, есть не на всех nix-ах. >Хочется, чтобы переносимость была максимальной и select в этом плане >немного получше.

 

 

 

>Обычно select способен обслужить 16 .. 64 дескриптора. А poll - до 1024 >и более ;)

 

 

Select в линуксе ограниченный. А в виндах select безграничный.

В рамках AWS реализован безграничный poll под Win32 на базе виндового select-a.

Новое сообщение:
Страницы: 1

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти