Друзья,
Скажите пожалуйста, а дружит ли 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.
Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти