Russian Qt Forum

Компиляторы и платформы => Windows => Тема начата: c++ от Май 18, 2004, 20:37



Название: Как создать многопоточный сервер?
Отправлено: c++ от Май 18, 2004, 20:37
Прошу прощения за повторение вопроса, но мое сообщение было удалено, видимо, злыми силами, заставляющими летать базу :)

Нужно написать многопоточный сервак, принимающий и отсылающий по инету данные. Никогда не писал такого, т.ч. мало что в этом понимаю.
Буду благодарен за ответ на следующий вопрос:
В каких случаях лучше использовать DCOM, а в каких просто писать руками? Да, сразу скажу, что желателен второй способ из-за переносимости в UNIX, но какие проблемы при программировании руками такого сервера возникают?
Также нуждаюсь в информации по написанию такого, а также в исходниках такого простейшего сервера.
Thanx.


Название: Как создать многопоточный сервер?
Отправлено: Admin от Май 18, 2004, 21:22
пробовал смотреть исходники примеров qt

там есть client - server пример


Название: Как создать многопоточный сервер?
Отправлено: xaos от Май 19, 2004, 18:12
Ну все зависит от типа данних которие ти собираєшся разсилать - пиши подробней
А проблеми - ето Декартово произвидение проблем при написании многопоточной програми і проблем при написании клиент сервера

зіж
С++ - обязателен для использования ?


Название: Как создать многопоточный сервер?
Отправлено: c++ от Май 19, 2004, 19:27
Спасибо всем за ответы!

1. Обязательно посмотрю хелп в QT. Если он многопоточный, наверное, это подойдет. Спасибо!
2. Типы данных при передаче следующие:
    2.1. Большие файлы (до 300 Мб)
    2.2. Маленькие файлы (до 50 Мб) (они передаются чаще)
    2.3. Небольшая информация.
    2.4. Передаются некоторые команды с клиента на сервер (т.е.
          видимо нужно сделать типы данных, при получении объектов  
          которых сервер их интерпретирует как команды. Наверное, так
          чаще всего и делается?).
    2.5. Сравнение различных md5 сумм, хеш-кодов паролей и т.д.

Язык реализации - С/С++. Вот и какой выбор тут сделать среди технологий?
А нет у тебя какого-нибудь примера  проги или ссылка?
Thanx.


Название: Как создать многопоточный сервер?
Отправлено: EugeneVC от Май 19, 2004, 20:08
мне кажется что С++ хватит а все технологии они не платформенно независимы

а еще насчет больших файлов могут возникнуть проблеммы в сдучае если есть проблеммы со связью. Может для больших файлов протокол ftp посмотреть. Он уже отлажен.


Название: Как создать многопоточный сервер?
Отправлено: c++ от Май 20, 2004, 20:54
Посмотрел пример Client-Server в справке QT. Там на стороне сервера создаются объекты ClientSocket. Но многопоточный ли этот сервер? Очень смутилa одна вещь в описании класса QServerSocket, который наследует SimpleServer: это про параметр конструктора int backlog:
Цитировать

Use backlog to specify how many pending connections the server can have

А что это за pending connections? Он что, запросы в очередь ставит? Или имеется ввиду постановка запросов в очередь, в то время как создается поток и т.п., т.е. при дополнительной работе сервер не забивал на клиентов, которые к нему коннектятся? Такой пример есть, кто знает, в книге Андрея Робачевского про Unix. Но там используется вызов fork, а как с этим в Windows'е быть?
Thanx.


Название: Как создать многопоточный сервер?
Отправлено: xaos от Май 21, 2004, 13:14
Цитировать

    2.1. Большие файлы (до 300 Мб)
    2.2. Маленькие файлы (до 50 Мб) (они передаются чаще)


О - тут будут проблеми   :twisted:  
DCOM - однозначно отпадает
ftp - ето совет хороший
не, пойми меня правильно, написать самому ето конечно можно - но время+нерви на ето уйдет уйма,  особенно для 1го человека

Цитировать

    2.3. Небольшая информация.
    2.4. Передаются некоторые команды с клиента на сервер (т.е.
          видимо нужно сделать типы данных, при получении объектов  
          которых сервер их интерпретирует как команды. Наверное, так
          чаще всего и делается?).
    2.5. Сравнение различных md5 сумм, хеш-кодов паролей и т.д.


Тут попроще
Но ... все равно геммор
Для етого можна заюзать хоть і qt

Предлагаю как альтернативу такой подход -
веб-сервер(например thhhpd-маленький и шустрий) + cgi-скрипти, что реализуют функциональность
(на С++ если так надо)
 

[/quote]


Название: Как создать многопоточный сервер?
Отправлено: EugeneVC от Май 21, 2004, 13:49
тоже неплохой вариант


Название: Re: Как создать многопоточный сервер?
Отправлено: Anonymous от Май 21, 2004, 13:50
Цитата: "c++"
Нужно написать многопоточный сервак, принимающий и отсылающий по инету данные. Никогда не писал такого, т.ч. мало что в этом понимаю.


Под УНИХами есть 2 способа создания многопоточности
- fork и клоны
- pthread и клоны

разница в том, что форк - создают клон текущего процесса со своей областью памяти, сохраняя доступ к файловым дескрипторам родителя
pthread - создает УНИХ вариант "нити" - средов LWP. Самый дешевый способ - написание рапперов для УНИХовского pthread и вмндового CreateThread - такой подход позволяет иметь общую логику работы приложения в УНИХ и Вынь с поддержкой IPC и без существенных потерь производительности...

Кроме того спорен сам вопрос о _многопоточности_ пересыльщика данный в УНИХ - там есть довольно простое решение - select - и достаточно одного потока. В Вынь можно сокеты обрабатывать тоже вполне асинхронно через WSxxx


Название: Как создать многопоточный сервер?
Отправлено: c++ от Май 21, 2004, 15:29
Посиксный врапер для Windows у меня есть. Пример с fork тоже, но аналога fork для Windows нет. Вот очень хочу разобраться, как делать в случае с pthred'ами. Нет ли какого-нибудь примера?
Thanx.