Кроссплатформенный клиент-сервер

Тема в разделе "WASM.UNIX", создана пользователем Max, 3 июн 2008.

  1. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    Можно. Но всё уже сказали, по-сути. Немного ifdef'ов -- инициализация приложения в *nix и win будет различаться. А во всём остальном вендовский winsock очень похож на unix'овый интерфейс сокетов. Даже select по-моему есть. Помимо этого можно стартовать параллельные потоки и делить соединения между ними. Можно стартовать также и процессы, но ради каждого соединения создавать процесс имеет смысл лишь в *nix, и то, если будет не слишком много соединений накапливаться одновременно.
    В *nix, помимо этого есть неблокирующие сокеты + сигналы -- не знаю, насколько это приложимо к виндовс. Плюс есть posix'овый наборчик функций aio_*.

    Зря боишься. Где-то я читал статью от разрабов апача, в которой они описывают каким образом апач обрабатывает входящие соединения. Со ссылками на файлы .c, и имена функций. С цитатами кода. Изучение той статьи может и займёт много времени, но время на изучение будет зависеть лишь от твоих знаний. Но чем меньше у тебя знаний, тем полезнее будет времяпровождение.

    На самом деле выбрать правильный подход за тебя невозможно, ибо задача неизвестна. Может у тебя будет один новый клиент в час появлятся, но сессия будет длиться часов пять -- тогда fork вполне пойдёт. Ну если конечно ни тебя, ни заказчиков не смущает то, что под вендой придётся таскать за собой кучку библиотек cygwin. А может у тебя десять коннектов в секунду, и среднестатистическая сессия длиной десять секунд -- а это совсем другой вариант.
     
  2. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Для сети я бы посоветовал не Qt, a ACE
     
  3. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    Max
    максимально кроссплатформенно клиент-сервер на базе CORBA
    mico.org
    смотри самплесы в нём
    прога пишется один раз и работает на любой системе где есть С++ т.е. практически
    везде
     
  4. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    r90
    Еще как есть :derisive:

    Аналогично. Только через одно место обработка - шлются сообщения оконной функции. Соответственно, нужно окно.

    Можно просто создавать потоки (нити) внутри процесса. Тогда нет зависимости от частоты и длительности сессий. Под Win это CreateThread(), под *nix - _thread().
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    event'ы еше есть.
    а не либа pthread для этого юзается? я всегда юзал pthread_*.
     
  6. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    n0name
    Ну это но и есть, либо я не понял. WM_SERVER_ACCEPT, FD_ACCEPT и т.п.


    Не буду утверждать, ибо нет под рукой *nix'овского компилятора. Но все-таки мне помнится именно _thread(). Но да и не суть важно. Главное, что вся разница в коде легко решается серией #ifdef.
    Правда, вроде есть неприятные различия в работе select и setsockopt.
     
  7. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    маскимальную производительность конечной системы можно получить только через условную компиляцию
    каждая ОС предоставляет (в большинстве случаев) _свой_ эффективный набор API для решения тех или иных задач
    не факт, что тот же POSIX для сети в Windows реализован так же эффективно, как в Linux или *BSD
    поэтому надо четко разделить логику и средства реализации логики
    логика кроссплатформенна по определению
    а для каждой поддерживаемой ОС нужно выбрать наиболее эффективные средства реализации (к примеру для Linux вместо select() можно использовать epoll_create()/epoll_ctl()/epoll_wait())
    и "обернуть" их макросами/функциями/...

    самый лучший вариант - это использование готовой библиотеки типа QT
     
  8. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    WSAEventSelect/WSAAsyncSelect - event'ы / оконные мессаги.
     
  9. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    Апач-то вертится под win, и я не слышал что ему на венде какие-то существенные пенальти в плане производительности положены. А если речь идёт о очень быстрой обработке соединений, когда вся работа упирается во ввод/вывод (апач-то ещё всякие скрипты гоняет...) то, насколько я понимаю laio -- это наиболее безумный вариант. Но там, мне кажется, будут огромные проблемы обеспечить кроссплатформенность.
     
  10. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    n0name
    А, все, туплю. Да это и не по теме ТС.

    r90
    Да ничего ему не положено.

    В этих случаях отказываются от использования Apache. Я лично до такой нагрузки на сервера не доходил, но один знакомы есть, чем-то ему Apache не приглянулся.