Проблема с performance при взаимодействии Win32 <-> WinCE

Тема в разделе "WASM.NETWORKS", создана пользователем _DEN_, 9 янв 2009.

  1. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Приложения обмениваются пакетами данных. Схематично это выглядит так:

    Код (Text):
    1. while()
    2. {
    3.     send(socket, sizeof(request));
    4.     send(socket, request);
    5.     receive(socket, response_size);
    6.     receive(socket, response);
    7. }
    Это клиент, запрос-ответ, со стороны сервера все аналогично.

    То есть, отправляем размер паката, потом сам пакет. Принимающая сторона, соответственно, считывает размер, из которого и узнает, сколько занимает пакет, то есть, сколько читать.

    Приведенные send и receive это именно функции winsock.

    Существовала проблема: 5 килобайт туда-сюда гонялись 2-3 раза в секунду в реальном приложении. В тестовом приложении - сотни раз в секунду. В итоге выяснилось, в чем дело. Если отправлять пакет в два вызова send (размер и самы данные), то в секунду удавалось сделать 2-3 запроса. Если же все предварительно складывать в один буффер (и размер, и самы данные) и отправлять данные за один вызов send, то проблем нет - в секунду идут сотни запросов.

    Вопрос - с чем это связано? Уверен на 80% (судя по логам), что просос по времени возникал в момент двух send с WinCE на Win32. Кривая реализация WinCE?

    Более точно о конфигурации:

    Сервер - мой рабочий десктоп, атлон 64 3000+.
    Клиент - телефон, подключенный к серверу по USB. На клиенте Windows Mobile 6. Сеть между ними, если не ошибаюсь, возникает под руководством Microsoft ActiveSync, или чего-то из ее утилит.

    PS. Проблема не в организации сети. Аналогичная х-е-р-н-я возникает при работе в живую через инет по EDGE.

    edit: нет, а я хочу именно это слово! :)))