Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Скорости DCOM и WinSocket  [new]
Rostislav D. Kudryashov
Member

Откуда:
Сообщений: 237
Простая функция на тестовом сервере: принять строку текста 20 символов, вернуть её обратно - для клиента это цикл послать/принять. Замеры по 10000 циклов в локальной сети 100Mb дали результаты: DCOM на VFP9 - 400 циклов/сек, Winsock на VC++6 - 5000/сек. Насколько типичны эти результаты, или я напортачил с реализацией?
27 дек 05, 07:06    [2211148]     Ответить | Цитировать Сообщить модератору
 Re: Скорости DCOM и WinSocket  [new]
oleg_km
Member

Откуда:
Сообщений: 161
Так а в чем вопрос.

DCOM при этом кучу работы сделал дополнительной: преобразование данных произвел, типы проверил, пересылку по RPC, авторизовал пользователя, права доступа. Если тебе это не надо, то почему-бы и не WinSock, а если будешь все делать сам - может у тебя и больше получится
27 дек 05, 09:23    [2211291]     Ответить | Цитировать Сообщить модератору
 Re: Скорости DCOM и WinSocket  [new]
Sergey Ch
Member

Откуда: Благовещенск
Сообщений: 8873
Немного непонятно, зачем Вы это делаете.

Читал неплохую статью на сайте компании West Wind там приводились результаты чего-то аналогичного, выиграл специально разработанный модуль на C++... Посмотрите сами по указанной ссылке, может найдете эту или другую статью...

Good luck!
27 дек 05, 12:47    [2212371]     Ответить | Цитировать Сообщить модератору
 Re: Скорости DCOM и WinSocket  [new]
Rostislav D. Kudryashov
Member

Откуда:
Сообщений: 237
Уточняю, хотя и не совсем понятно, что такое "это нехорошее", что я делаю. Фокс система не только SQL-ская, но и "записийная". Для обработки данных
в режиме навигации по записям существенно время исполнения мелких операций, запрашиваемых клиентом сервера. И это даже если основная работа выполняется на сервере "хранимыми процедурами" с представлением клиенту результатов в виде небольшх наборов данных. Например, надо подставлять в редактируемое поле значения по прокручиваемому списку из очень большого справочника, хранимого на сервере.
27 дек 05, 19:36    [2214449]     Ответить | Цитировать Сообщить модератору
 Re: Скорости DCOM и WinSocket  [new]
w3d
Member

Откуда: Сургут
Сообщений: 681
Rostislav D. Kudryashov
Простая функция на тестовом сервере: принять строку текста 20 символов, вернуть её обратно - для клиента это цикл послать/принять. Замеры по 10000 циклов в локальной сети 100Mb дали результаты: DCOM на VFP9 - 400 циклов/сек, Winsock на VC++6 - 5000/сек. Насколько типичны эти результаты, или я напортачил с реализацией?

А код того и того можно глянуть?
Методика замера?
Локальная сеть общая или специально ворганизованная (из 2 машин)?
И еще, что мешает тот же самый Winsock на VFP сделать?
28 дек 05, 05:45    [2214956]     Ответить | Цитировать Сообщить модератору
 Re: Скорости DCOM и WinSocket  [new]
Rostislav D. Kudryashov
Member

Откуда:
Сообщений: 237
Для w3d: тексты в приложении, в них и методика замера, а сеть - локалка бщая Ethernet 100Mb, но разные запуски не слишком разнятся по скорости, так что влиянием чужого трафика можно пренебречь.
Вся идея состоит в Фоксовском COM-сервере для таблиц DBF. Он должен быть доступен для Java-клиентов и не мешать старым файл-серверным DOS-задачам. Для этого нужен еще к-то прокси. Он может быть на DCOM (IBM Bridge2Java или свой JNI) или на Winsocket.
Писать Winsocket прокси на Фоксе нет смысла. Я так понимаю, чтоб клиентские запросы обрабатывались Fox-м многопоточно, с квантованием времени, надо чтоб обращения к FOX-COM (и VFP9t) шли из разных потоков на хосте, создаваемых в Winsocket-прокси для каждого клиента. Сам же Fox не умеет создавать потоки.

К сообщению приложен файл (annex.txt - 7Kb) cкачать
28 дек 05, 09:58    [2215302]     Ответить | Цитировать Сообщить модератору
 Re: Скорости DCOM и WinSocket  [new]
Sergey Ch
Member

Откуда: Благовещенск
Сообщений: 8873
Все равно не понятно, что Вы делаете...

Неужели нельзя уже использовать что-то стандартное, быстрое и готовое, например Web Services? Тогда данные из FoxPro можно использовать хоть на Java (так как обмен будет вестись на чистом XML)...
28 дек 05, 10:14    [2215367]     Ответить | Цитировать Сообщить модератору
 Re: Скорости DCOM и WinSocket  [new]
oleg_km
Member

Откуда:
Сообщений: 161
автор
Сам же Fox не умеет создавать потоки.


Так их умеет делать DCOM или COM+ подсистема Windows. Ты же на WinSock фактически тоже самое будешь делать.
28 дек 05, 10:24    [2215417]     Ответить | Цитировать Сообщить модератору
 Re: Скорости DCOM и WinSocket  [new]
Rostislav D. Kudryashov
Member

Откуда:
Сообщений: 237
Для Sergey Ch. WebServices звучит заманчиво, но тут у меня пробел. Действительно ли, что Web будет реагировать на частые и малые запросы быстрее DCOM (400 циклов/сек по сравнению с 5000 из Winsocket на сети 100Mb удручают, а ведь реальная работа пойдёт на 2Mb)? Например, при правке полей надо проверять допустимость значений с прокруткой большого объёма данных на сервере. И ещё вопрос в том, что дистрибуты заказчикам я могу передавать только по e-mail. Даже если я сам подкуюсь по части Web, сумею ли я разъяснить заказчикам, что им надо у себя устроить? Можно ли воткнуть в дистрибут инстолятор Web-сервера? Скажите "да", я тогда уж постараюсь!
28 дек 05, 19:35    [2218373]     Ответить | Цитировать Сообщить модератору
 Re: Скорости DCOM и WinSocket  [new]
Sergey Ch
Member

Откуда: Благовещенск
Сообщений: 8873
Rostislav D. Kudryashov
Для Sergey Ch. WebServices звучит заманчиво, но тут у меня пробел. Действительно ли, что Web будет реагировать на частые и малые запросы быстрее DCOM (400 циклов/сек по сравнению с 5000 из Winsocket на сети 100Mb удручают, а ведь реальная работа пойдёт на 2Mb)? Например, при правке полей надо проверять допустимость значений с прокруткой большого объёма данных на сервере. И ещё вопрос в том, что дистрибуты заказчикам я могу передавать только по e-mail. Даже если я сам подкуюсь по части Web, сумею ли я разъяснить заказчикам, что им надо у себя устроить? Можно ли воткнуть в дистрибут инстолятор Web-сервера? Скажите "да", я тогда уж постараюсь!

1. Насчет быстрее я не уверен, так как в процессе участвует промежуточное звено - IIS.
2. Не понимаю, что значит частые и малые - что Ваша задача реально делает? Какой бизнес - процесс?
3. Многопоточность в SOAP 3.0 реализована хорошо.
4. Большой объем данных в таблицах должен быть проиндексирован по нужному полю плюс побольше памяти на сервере не помешает (задачу могут тормозить приложения на старом FoxPro)...
5. Установить Web Service на сервере заказчика можно просто... Но в дистрибутив вложить будет немного сложновато - проще если они сами сгенерируют Ваш код на сервере, но в принципе все решаемо - мне клиенты дают доступ по терминальной сессии через интеренет а там я уже делаю свое "черное" дело. Если использовать методику, описанную в моем примере, то это далать надо только один раз, а потом просто давать им новую DLL, которую Вы получите на своем компьютере из FoxPro+SOAP 3.0...

Так что однозначно на Ваш вопрос я не могу ответить "да"...
28 дек 05, 20:26    [2218442]     Ответить | Цитировать Сообщить модератору
 Re: Скорости DCOM и WinSocket  [new]
Igor Korolyov
Member

Откуда: Гомель, Беларусь
Сообщений: 2512

Hi Rostislav!

Ты полагаешь, что основное время будет расходоваться на TCP обмен? Что-то не
верится... Ты раельным чем-нить нагрузи свой "сервер" - да хоть бы и
созданием примитивной выборки из 10-ка записей по (оптимизируемому)
условию - тогда и сравнивай :)
Кроме того для COM+ можно обеспечить межсерверную транзакционность (правда
придётся писать свой "компенсатор" - но пример в VFP имется), пул объектов
(т.е. чтобы скажем 400 клиентов обслуживало на 400 конкурентных потоков, а
всего 10-20 :) ), авторизацию в конце концов...
И ещё - ен понятно КАК ты это делал - т.е. реально DCOM (весьма уже древняя
по сегодняшним меркам технология) или всё-же COM+ (который хоть и
"преемник", но заметно расширенный)... И опять-же сколько было потоков на
сервере в том и другом случае, какова методика тестирования (IMHO 1 клиент
делающий кучу коннекций/запросов+1 сервер - это не очень типичное решение -
т.е. тут может быть своя специфика).

Posted via ActualForum NNTP Server 1.3

29 дек 05, 01:48    [2219120]     Ответить | Цитировать Сообщить модератору
 Re: Скорости DCOM и WinSocket  [new]
Rostislav D. Kudryashov
Member

Откуда:
Сообщений: 237
Igor Korolyov. Извиняюсь за неточность, конечно, я использовал MTS+ на Win2000, а не DCOM. А что касается многоаспектности рассматриваемого процесса, факт остаётся фактом - скорость обработки запросов по сети через MTS+ слишком мала и не только по сравнению с Winsocket. Тот же COM-сервер, вызываемый локально на CPU 1330Mhz показывает 35000 циклов/сек против 400 из MTS+. Накладные расходы на сеть ЧУДОВИЩНЫ. Так что с сокрушением сердца обращаю взор к Winsocket'у.
30 дек 05, 05:51    [2222602]     Ответить | Цитировать Сообщить модератору
 Re: Скорости DCOM и WinSocket  [new]
oleg_km
Member

Откуда:
Сообщений: 161
Это можно оценить примерно так. Есть одна крайность, написать на ассемблере под чистый Ethernet - летать (работать) будет быстро, но взлетать (разрабатываться) очень долго. Есть другая крайность, написать на каком-нибудь макроязыке и как транспорт использовать электронную почту - летать не будет, взлетать правда тоже будет долго.
Я что хотел сказать. DCOM (COM+) - это межмашинная технология, которая предоставляет программисту определенный дополнительный сервис (не претендую на полноту):
- безопасность (авторизацию, права доступа);
- преобразование данных (передаем в методы параметры как есть - COM-подсистема сама их сериализирует);
- объектную ориентированность и прозрачность использования локально-удаленно;
- и что-то там еще много, не хочу напрягаться.
НО. Все это стоит дополнительных расходов. Поэтому, если данные излишества не нужны или наоборот вредят - долой их и работаем на чистом WinSocket
30 дек 05, 10:55    [2223026]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить