OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Среда, 27 Март, 2024 08:04

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: серверный режим через сеть
СообщениеДобавлено: Воскресенье, 22 Ноябрь, 2009 22:24 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Никто не думал? (Квази-) Серверный режим через TCP/IP.
В локальной сети или по какому-нить защищенному каналу.
Какую надо минимальную запускалочку? Какое-нибудь кеширование с проверкой обновлений?
Квази-браузер такой.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серверный режим через сеть
СообщениеДобавлено: Воскресенье, 22 Ноябрь, 2009 23:10 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
Хотите всё полностью по сети грузить? А на машине только файл пускач с поддержкой сети?

Над таким думали, но так как задача практики не касалась - в производство не пошло. :)

Нужно влинковать в экзешник поддержку сети и соответствующим образом модернизировать HostFiles. Как вариант.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серверный режим через сеть
СообщениеДобавлено: Понедельник, 23 Ноябрь, 2009 09:24 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Борис Рюмшин писал(а):
Хотите всё полностью по сети грузить? А на машине только файл пускач с поддержкой сети?
Типа. Чтобы не только с сетевого диска серверный режим устроить -- и отвязаться от конкретной ОСи.

И как дополнительный вариант: чтобы сам этот пускач мог работать в серверном режиме -- для локальных рабочих мест.
Правда, тут другая задача -- автообновление.
Но механизм подкачки модулей/кеширования тот же.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серверный режим через сеть
СообщениеДобавлено: Суббота, 28 Ноябрь, 2009 16:07 

Зарегистрирован: Суббота, 06 Июнь, 2009 07:52
Сообщения: 329
Я объединял примеры ObxStreamsServer и ObxStreamsClient в один модуль и делал версии этого модуля для «машины-клиента» и «машины-сервера». Ключевое отличие:
Код:
 CONST
protocol = "CommTCP";
localAdr = "800"; (* адрес для машины-сервера   *)
(* localAdr = "900";  адрес для машины-клиента   *)
remoteAdr = "127.0.0.1:900";
(* remoteAdr = "127.0.0.1:800";
localAdr_s= "";
Далее, запускал два приложения ВВ и каждый своим модулем открывал порты(т.е. запускал сервер). Выделенная строка передается с «машины-клиента» на «машину-сервера» (и наоборот).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серверный режим через сеть
СообщениеДобавлено: Суббота, 28 Ноябрь, 2009 17:18 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
id_ler писал(а):
Выделенная строка передается с «машины-клиента» на «машину-сервера» (и наоборот).
Непонятно, что за "выделенная строка".

Речь об эксперименте по передаче строки через tcp/ip?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серверный режим через сеть
СообщениеДобавлено: Суббота, 28 Ноябрь, 2009 19:05 

Зарегистрирован: Суббота, 06 Июнь, 2009 07:52
Сообщения: 329
В подсистеме Comm(BlackBox Component Builder 1.5) находятся модули, которые реализуют канал TCP/IP, используя механизм сокетов ОС (для Windows). В папке Comm\Docu есть документация для модулей CommObxStreamsServer и CommObxStreamsClient – это сервер и клиент. Чтобы запустить их в совместную работу нужно в документации на CommObxStreamsServer стартовать сервер коммандером

(!)CommObxStreamsServer.Start

При этом ОС откроет порт 900 по своему внутреннему адресу 127.0.0.1, который в локальной сети может быть любым возможным.
Далее, в документации на CommObxStreamsClient нужно выделить любую строку текста и нажать коммандер

(!)CommObxStreamsClient.SendTextSelection

Вы увидите новое окно с текстом, который был выделен. Его создаст сервер. Чтобы остановить сервер и закрыть порт нужно нажать коммандер

(!)CommObxStreamsServer.Stop

Я же создал два процесса BlackBox.exe, каждый из которых открыл свой порт и через них передавал текст.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серверный режим через сеть
СообщениеДобавлено: Суббота, 28 Ноябрь, 2009 19:21 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
уважаемый, тут речь немного не о том. почитайте про серверный режим работы среды и использование ключа коммандной строки /use :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серверный режим через сеть
СообщениеДобавлено: Среда, 02 Декабрь, 2009 13:04 

Зарегистрирован: Суббота, 06 Июнь, 2009 07:52
Сообщения: 329
Пётр Кушнир писал(а):
уважаемый, тут речь немного не о том. почитайте про серверный режим работы среды и использование ключа коммандной строки /use :)

Мне кажется, что для задач указанных в параграфе 4 Серверная установка «Руководство пользователя», в рабочей директории удобно создавать файлы с временными именами, используя WinApi-функцию GetTempFileName. Она позволяет добавлять к префиксу имени файла, например, текущее системное время.

Попытался перевести такую программку с С++ при помощи утилиты с2ср из коллекции Helmut’а Zinn’а. Удивительно, что листинг перевода содержит GOTO и метки переходов. Указать правильные типы большого труда не составляет, но может быть есть более грубые нестыковки. Поэтому приведу оба листинга.
Код:
 LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
static HANDLE hFile;
static char   szTmpFile[MAX_PATH+1];
   switch( uMsg )
   {
      case WM_CREATE  :
              {
                 char szTmpPath[MAX_PATH+1];
                 GetTempPath( MAX_PATH, szTmpPath );
                 GetTempFileName( szTmpPath, "GEN", 0, szTmpFile );
                 hFile = CreateFile( szTmpFile, GENERIC_READ | GENERIC_WRITE,
                                     0, NULL, OPEN_ALWAYS,
                                     FILE_ATTRIBUTE_TEMPORARY, NULL );
              }
              break;

   ………………………………………………….

     case WM_DESTROY :
             if ( hFile )
              {
                 CloseHandle( hFile );
                 DeleteFile( szTmpFile );
              }
              PostQuitMessage(0);
              break;
      default :
            return( DefWindowProc( hWnd, uMsg, wParam, lParam ) );
   }
   return( 0L );
}

Код:
 (*-----------------------------------------------------------------------------
--   Von C nach Pascal ьbersetzt mit dem Program CTOPAS
--   (C) Helmut Zinn   V95/12/12
-----------------------------------------------------------------------------*)

MODULE TmpFile;

   IMPORT StdLog;

   PROCEDURE ^ WndProc (hWnd:HWND; uMsg:UINT; wParam:WPARAM; lParam:LPARAM) : LRESULT;
   
   VAR CALLBACKPROCEDURE WndProc (hWnd:HWND; uMsg:UINT; wParam:WPARAM; lParam:LPARAM) : LRESULT;
   LABEL L1;
         (*static*)VAR hFile : HANDLE;
   (*static*)VAR szTmpFile : ARRAY MAX_PATH+1 OF CHAR;
   BEGIN
       CASE uMsg OF
         | WM_CREATE  :
            CHAR szTmpPath[MAX_PATH+1];
            GetTempPath(MAX_PATH, szTmpPath);
            GetTempFileName(szTmpPath, 'GEN', 0, szTmpFile);
            hFile := CreateFile(szTmpFile, GENERIC_READ OR GENERIC_WRITE, 0, NIL, OPEN_ALWAYS, FILE_ATTRIBUTE_TEMPORARY, NIL);
            GOTO L1; (* Warning: no break statement *)
         END;
         break;

         …………………………….

         | WM_DESTROY :
            L1:
            IF hFile # 0 THEN
               CloseHandle(hFile);
               DeleteFile(szTmpFile);
            END;
            PostQuitMessage(0);
            (* BREAK *)
         ELSE
            WndProc := DefWindowProc(hWnd, uMsg, wParam, lParam);
            RETURN;
         END;
      END;
      WndProc := 0(*L*);
      RETURN;
   END WndProc;
   
END TmpFile.
Такую вставку можно сделать в модуль CommObxStreamsServer вместо создания окна сообщения. Программка должна создать новый временный файл и открыть его. Если файл был создан, тогда его удалить. Не суть, что в модуле используется функция(GetTempPath) поиска из системных переменных временных папок. Каталог можно указать в зависимости от задачи.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серверный режим через сеть
СообщениеДобавлено: Среда, 02 Декабрь, 2009 14:23 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
А оно компилируется в Блэкбоксе с этими метками и GOTO?
Если да, то это жестокая насмешка над Виртом со стороны Оминка...

upd. Только что попытался проверить в BB 1.5 -- не компилируется...
Код:
MODULE GotoTest;

IMPORT StdLog;

PROCEDURE Go*;
   VAR x : INTEGER;
   LABEL L1;
BEGIN
   x := 0;
   L1:   StdLog.Int(x);
         INC(x);
         GOTO L1;
END Go;

END GotoTest.


Последний раз редактировалось Geniepro Пятница, 04 Декабрь, 2009 08:23, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серверный режим через сеть
СообщениеДобавлено: Среда, 02 Декабрь, 2009 21:07 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
2 id_ler

ну, винапи не нужно- насколько я помню, в модуле Files присутствует функция создания временных файлов. да и вообще, вопросы конкретной реализации можно пока не рассматривать - мне лично представляется такой режим работы: запускаем загрузчик с ключом /use trunk.oberoncore.ru , загрузчик по спец протоколу загружает модули(новые или обновленные), сохраняет их в кэш, затем ядро их загружает - среда готова к работе.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серверный режим через сеть
СообщениеДобавлено: Среда, 02 Декабрь, 2009 21:16 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
поэтому понятно, то загрузчик должен минимум содержать модули по работе с файлами, сетью(прокси всё такое), протоколом проверки обновлений(версионность по дате, хэшу и тп). собственно даже кэширование необязательно, у нас же либо модули будут сохраняться на диске, либо они будут каждый раз грузиться из сети.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серверный режим через сеть
СообщениеДобавлено: Четверг, 03 Декабрь, 2009 08:59 

Зарегистрирован: Суббота, 06 Июнь, 2009 07:52
Сообщения: 329
Пётр Кушнир писал(а):
запускаем загрузчик с ключом /use trunk.oberoncore.ru , загрузчик по спец протоколу загружает модули(новые или обновленные), сохраняет их в кэш, затем ядро их загружает - среда готова к работе.
Вы пишете как загрузиться и начать работу. Я же акцентировался на том, чем удобнее пользоваться при окончании работы и очистке среды. Как говорится в документации к модулю Files
Цитата:
Temp создает временный файл. Такой файл никогда не регистрируется и потому остается анонимным.
Кроме этого, надо как-то вести лог подключений. При использовании GetTempFileName сам список файлов может содержать дату и время.
Пётр Кушнир писал(а):
да и вообще, вопросы конкретной реализации можно пока не рассматривать
Полностью согласен с тем, что важнее разработать концепцию.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серверный режим через сеть
СообщениеДобавлено: Суббота, 05 Декабрь, 2009 11:46 

Зарегистрирован: Суббота, 06 Июнь, 2009 07:52
Сообщения: 329
Попытаюсь применить парадигму «Всё есть документ» для обмена данными между ВВ-клиентом и ВВ-сервером через сеть. Извиняюсь за объяснение «на пальцах». У меня с терминологией туго.

Когда ВВ-клиент делает запрос ВВ-серверу для установления соединения, он передает данные, которые заполняют поля в документе на сервере. В дальнейшем данные из этого документа сортируются ВВ-сервером по специальному шаблону. Полями этого шаблона могут быть пароль, логин, тип крипто-ключа, само тело сообщения-запроса и т.д. Документ на сервере периодически обновляется. Период обновления зависит от сети (локальная или глобальная). Если передаваемые на сервер данные превышают объем, определенный в шаблоне, тогда сервер может разорвать такое соединение, не дожидаясь окончания сессии. Чтобы получить несанкционированный доступ к информации в документе ВВ-сервера нужно получить доступ к самому файлу, содержащему этот документ и, как минимум, скопировать его в буфер обмена. При этом потеряется структура документа и, в сочетании с постоянным обновлением, такие действия не позволят восстановить информацию. Подобный документ создается и на стороне ВВ-клиента. Поэтому отпадает необходимость в высокоуровневом протоколе обмена данными – и ВВ-клиент, и ВВ-сервер смогут гибко менять передаваемую информацию в зависимости от запросов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серверный режим через сеть
СообщениеДобавлено: Суббота, 05 Декабрь, 2009 15:19 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
id_ler писал(а):
Попытаюсь применить парадигму «Всё есть документ» для обмена данными между ВВ-клиентом и ВВ-сервером через сеть.
Может быть, лучше будет "Всё есть Stores.Store"?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серверный режим через сеть
СообщениеДобавлено: Суббота, 05 Декабрь, 2009 16:47 

Зарегистрирован: Суббота, 06 Июнь, 2009 07:52
Сообщения: 329
Я исхожу из того, что для сети должен быть лаконичный интерфейс. Он не препятствует расширяемости системы, а является скорее щитом, за которым эта расширяемость может быть какой-угодно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серверный режим через сеть
СообщениеДобавлено: Суббота, 05 Декабрь, 2009 21:18 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Так Store лаконичней, чем Document.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серверный режим через сеть
СообщениеДобавлено: Воскресенье, 06 Декабрь, 2009 06:49 

Зарегистрирован: Суббота, 06 Июнь, 2009 07:52
Сообщения: 329
Store для сети будет слишком низкоуровневым интерфейсом. Если предоставить возможность бесконтрольно расширять систему(т.е. типы данных), в такой системе появится много лишнего. Хотя, зависит от задачи. Если, например, в локальной сети необходимо привлечь машину клиента для совместных вычислений, т.е. расширить сервер, тогда мной описанный вариант окажется не эффективным.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серверный режим через сеть
СообщениеДобавлено: Воскресенье, 06 Декабрь, 2009 14:32 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
id_ler писал(а):
Store для сети будет слишком низкоуровневым интерфейсом. Если предоставить возможность бесконтрольно расширять систему (т.е. типы данных), в такой системе появится много лишнего.
Документы-то составные. В них черте-что может быть запихнуто.

Тогда всё-таки Store выглядит в силу своей обобщённости более привлекательным.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серверный режим через сеть
СообщениеДобавлено: Воскресенье, 06 Декабрь, 2009 21:28 

Зарегистрирован: Суббота, 06 Июнь, 2009 07:52
Сообщения: 329
Если представить ситуацию, когда созданы десятки и сотни подключений, то мне не понятно, что произойдет. Предположу, что вся нагрузка ляжет на компилятор. Как минимум, нужно разделить по времени обработку каждого соединения. Насколько это замедлит процесс? Если замедлит существенно, тогда, как вариант, нужно написать всего один расширяемый тип специально для передачи данных по сети.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: серверный режим через сеть
СообщениеДобавлено: Понедельник, 07 Декабрь, 2009 12:40 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
id_ler писал(а):
тогда, как вариант, нужно написать всего один расширяемый тип специально для передачи данных по сети.
Зачем новый, когда уже есть Stores.Store.


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

Часовой пояс: UTC + 3 часа


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

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


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

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB