Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Ср апр 24, 2024 17:43

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: RPC
СообщениеДобавлено: Чт ноя 08, 2007 20:41 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Хотелось бы обсудить варианты реализации RPC с точки зрения форт-стиля, не пользуясь платформенно-зависимыми механизмами.

_________________
http://akps.ssau.ru/forth/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 08, 2007 20:45 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Скажем имеем два форт-процесса, один на узле с win32, другой под UNIX (для упрощения не будем рассматривать вариант с разной разрядностью 32/64 бита). Ну скажем, один процесс -- сервер, отображающий в графическом окне сообщения (pager) на рабочей станции юзера под win32, и клиент на юниксовой числомолотилке, который хочет послать сообщение что настал писец винту в RAID-массиве.

_________________
http://akps.ssau.ru/forth/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 08, 2007 20:51 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
примерный код клиента:

Код:
RPC" PAGER/BeginMessage"
RPC" PAGER/ALERT"
S" detected error with "        RPC" PAGER/STRING."
RAID/GetFaultDeviceID         RPC" PAGER/HEX."
RAID/GetFaultDeviceName    RPC" PAGER/STRING."
S" HOSTNAME"                    RPC" PAGER/STRING."
OS/GetHostName                RPC" PAGER/STRING."
RPC" PAGER/EndMessage"

_________________
http://akps.ssau.ru/forth/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 08, 2007 20:55 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
В этом случае код RPC" wordname" должен породить код, который выполнить поиск сервера возможно из нескольких которые умеют PAGER/bla-bla-bla , определить сколько элементов снять со стека клиента и отправить серверу, для элементов типа строк отправить сами данные, запихнуть на стек сервера эти данные, вызвать слова-методы клиента, вернуть результат

_________________
http://akps.ssau.ru/forth/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 08, 2007 20:56 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
получается как-то сложно и геморно

_________________
http://akps.ssau.ru/forth/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 08, 2007 21:00 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
упрощая, получаем что-нибудь типа:
Код:
data1 @ ( data1 )
data2 ( data2-ptr )
2 ( количество элементов на стеке которые нужно подсунуть серверу )
S" 192.168.0.34" IP->RPC-ID ( server_rpc-id )
RPC" ProcessSomeData_method"
( результаты после RPC-вызова )

_________________
http://akps.ssau.ru/forth/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 08, 2007 21:05 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
В этом случае код реализации RPC
- соединяется с сервером по некоему ServerID (им может быть просто URL в виде строки или IP-адрес из 4х байт слепленных в 32-битное число на заранее известный TCP/IP порт)
- отсылает вершину стека одним куском или поэлементно
- отсылает имя метода
- ждет пока сервер что-нибудь вякнет в ответ или наступит таймаут

Сервер
- получает запрос на соединение
- принимает размер куска данных и сами данные и кладет себе на стек
- получает имя метода
- ищет в своем словаре имя
- если не находит, обрывает соединение
- если находит, вызывает метод и отправляет взад результат

_________________
http://akps.ssau.ru/forth/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 08, 2007 21:09 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Еще вариант для случая если клиент и сервер реализованы в виде платформенно-независимого байт-кода:

Клиент
- берет данные и
- компилирует пакет-программу, которая будет выполнять некие действия, а потом
- посылает этот пакет-программу на сервер

Сервер
- ожидает входящие пакеты, и по приему
- запускает их на выполнение как самостоятельные процессы
- которые выполняются и отсылают при необходимости результат обратно,
- тоже создавая пакет

_________________
http://akps.ssau.ru/forth/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 08, 2007 21:12 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
При использовании обменом программами-пакетами трафик между клиентом и сервером будет значительный, поэтому этот вариант отбрасываем.
Остается придумать какой-то простой протокол по передаче вершины стека, блоков данных произвольного объема при необходимости, типа строк, вызова метода, и возврата обратно результата

_________________
http://akps.ssau.ru/forth/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 08, 2007 21:13 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Может кто-нибудь работал с CORBA на низком уровне ?
Насколько сложно реализовать CRB-сервер на Форте ?

_________________
http://akps.ssau.ru/forth/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 08, 2007 21:15 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Одна из сложностей -- разделяемой памяти между клиентом и сервером нет (иначе хватило бы использования idшников этих блоков), поэтому требуется реализовать механизм их пробрысывания между узлами

_________________
http://akps.ssau.ru/forth/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 08, 2007 21:19 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Как вариант -- ограничиться только возможностью передачи вершины стека туда/обратно, и вызовом процедуры по имени (потребуется как-то оптимизировать поиск чтобы не пробегать по всему словарю на каждый вызов), и передачу больших блоков данных реализовывать поверх этого механизма.

_________________
http://akps.ssau.ru/forth/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 08, 2007 22:20 
Вместо компиляции бинарной пакет-программы проще сформировать программу в текстовом виде (простейше — строки, числа и имена слов, а передача больших объемов данных — задача отдельная); подобное используется в Web, XHR Comet. На сервере сделать доступным лишь необходимый лексикон (чтобы не перебирать тысячи ненужных слов). Проще использовать TCP, тогда пакеты ненужны. А если пойти далее, то вообще стоит идти поверх HTTP :) Мне предпочтительней REST-подход (Representational State Transfer), чем DCOM/RPC.
А Юра Жиловец сделал протокол наподобии HTTP — er22 (см. исходники на его страницах).


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 08, 2007 23:49 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Эээ... а вот можно как-нибудь компоновать свои мысли и не превращать форум в ЖЖ?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 09, 2007 01:03 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
rvm писал(а):
проще сформировать программу в текстовом виде ... А если пойти далее, то вообще стоит идти поверх HTTP :) Мне предпочтительней REST-подход (Representational State Transfer), чем DCOM/RPC. А Юра Жиловец сделал протокол наподобии HTTP — er22 (см. исходники на его страницах).

на каждый чих запускать парсер ? брр...

_________________
http://akps.ssau.ru/forth/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB