Russian Qt Forum
Апрель 28, 2024, 02:01 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как создать многопоточный сервер?  (Прочитано 13312 раз)
c++
Гость
« : Май 18, 2004, 20:37 »

Прошу прощения за повторение вопроса, но мое сообщение было удалено, видимо, злыми силами, заставляющими летать базу Улыбающийся

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

Сообщений: 1988



Просмотр профиля
« Ответ #1 : Май 18, 2004, 21:22 »

пробовал смотреть исходники примеров qt

там есть client - server пример
Записан
xaos
Гость
« Ответ #2 : Май 19, 2004, 18:12 »

Ну все зависит от типа данних которие ти собираєшся разсилать - пиши подробней
А проблеми - ето Декартово произвидение проблем при написании многопоточной програми і проблем при написании клиент сервера

зіж
С++ - обязателен для использования ?
Записан
c++
Гость
« Ответ #3 : Май 19, 2004, 19:27 »

Спасибо всем за ответы!

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

Язык реализации - С/С++. Вот и какой выбор тут сделать среди технологий?
А нет у тебя какого-нибудь примера  проги или ссылка?
Thanx.
Записан
EugeneVC
Гость
« Ответ #4 : Май 19, 2004, 20:08 »

мне кажется что С++ хватит а все технологии они не платформенно независимы

а еще насчет больших файлов могут возникнуть проблеммы в сдучае если есть проблеммы со связью. Может для больших файлов протокол ftp посмотреть. Он уже отлажен.
Записан
c++
Гость
« Ответ #5 : Май 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
Гость
« Ответ #6 : Май 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
Гость
« Ответ #7 : Май 21, 2004, 13:49 »

тоже неплохой вариант
Записан
Anonymous
Гость
« Ответ #8 : Май 21, 2004, 13:50 »

Цитата: "c++"
Нужно написать многопоточный сервак, принимающий и отсылающий по инету данные. Никогда не писал такого, т.ч. мало что в этом понимаю.


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

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

Кроме того спорен сам вопрос о _многопоточности_ пересыльщика данный в УНИХ - там есть довольно простое решение - select - и достаточно одного потока. В Вынь можно сокеты обрабатывать тоже вполне асинхронно через WSxxx
Записан
c++
Гость
« Ответ #9 : Май 21, 2004, 15:29 »

Посиксный врапер для Windows у меня есть. Пример с fork тоже, но аналога fork для Windows нет. Вот очень хочу разобраться, как делать в случае с pthred'ами. Нет ли какого-нибудь примера?
Thanx.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.108 секунд. Запросов: 22.