powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Программирование работы сервера с множеством клиентов
25 сообщений из 123, страница 4 из 5
Программирование работы сервера с множеством клиентов
    #33124925
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-С удовольствием выслушаю конструктивную критику.


А что можно критиковать, если этот кусок вне контекста не имеет смысла. Что есть c_nettimer нам неясно. Где работа с витками не видно. А главное для чего это было сделано, не написали. Еще один выпендреж?
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33124975
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat- Землекоп
Открою военную тайну. Самое смешное, что такие задачи чаще всего решают люди, которые не особенно вникают в сокеты, ОПП и тд и тп. Им хватает php, perl и тд и тп. Совсем отсталые довольствуются просто html-файлами. WWW - сервер разбирается сам с этими проблемами. Он для этого и был придуман.

Посмотрите на название раздела, он называется C++,
значит подразумемает обсуждение ООП проекта.

Вобщем не нужно съезжать с темы.

Вопрос был про общепринятые способы решения аналогичных проблем (только для мультиплатформенного кода с BSDSockets/WinSocks, без компонентов и иже с ними). Я пример нынешнего состояния дел в этой области.
Кстати, в вашем коде есть строчка:

Код: plaintext
c_netconn* s_conn[MAXCONN]; 

А почему вы не воспользовались
Код: plaintext
std::vector<c_netconn *>s_conn
Дабы привнести все прелести С++?
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33125041
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Землекоп onstat-С удовольствием выслушаю конструктивную критику.


А что можно критиковать, если этот кусок вне контекста не имеет смысла. Что есть c_nettimer нам неясно. Где работа с витками не видно. А главное для чего это было сделано, не написали. Еще один выпендреж?

Обьясните мне,что вы подразумеваете по термином виток?
Это наверное спец термин в вашей организации.

В коментариях к классам написано.
c_netconn управляет дескрипторами сокетов и соединениями если
инициализирован как клент.

с_netconnpool пул сетевых соединений с поддержкой
мультиплексирования и асинхронного ввода вывода.

В общем позволяет прикландому програмисту вычитать
сообщение пришедшее по сети из внутренних буферов класса с_netconn.

Метод c_netconnpool::socket() засыпает на период указанный
в
int s_sec; // default sleep in second
int s_usec; // default sleep in milisecond
(по умолчанию одна секунда).
Далее период сна регулируется статистикой прихода новых сообщений.
Просыпается сразуже как только в буфере есть принятое сообщение.

Да кстате этот работает пока только под unix.

Если нужно будет под M$ для прикладного програмиста
интерфейс не поменяется.

Используется в программе маршрутизаторе
XML сообщений.

Полный код вы скоро сможете найти в проекте OpenDSA,
когда он выйдет. Концептуальное обсуждение проекта пока здесь
http://www.sql.ru/forum/actualthread.aspx?tid=185115
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33125055
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Землекоп onstat- Землекоп
Открою военную тайну. Самое смешное, что такие задачи чаще всего решают люди, которые не особенно вникают в сокеты, ОПП и тд и тп. Им хватает php, perl и тд и тп. Совсем отсталые довольствуются просто html-файлами. WWW - сервер разбирается сам с этими проблемами. Он для этого и был придуман.

Посмотрите на название раздела, он называется C++,
значит подразумемает обсуждение ООП проекта.

Вобщем не нужно съезжать с темы.

Вопрос был про общепринятые способы решения аналогичных проблем (только для мультиплатформенного кода с BSDSockets/WinSocks, без компонентов и иже с ними). Я пример нынешнего состояния дел в этой области.
Кстати, в вашем коде есть строчка:

Код: plaintext
c_netconn* s_conn[MAXCONN]; 

А почему вы не воспользовались
Код: plaintext
std::vector<c_netconn *>s_conn
Дабы привнести все прелести С++?

Я просил конструктивно.

А что есть принципиальная разница?
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33125085
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-
Обьясните мне,что вы подразумеваете по термином виток?
Это наверное спец термин в вашей организации.


Согласен, что локальный сленг. Один из вариантов перевода Thread


onstat-
с_netconnpool пул сетевых соединений с поддержкой
мультиплексирования и асинхронного ввода вывода.


*.cpp глянуть можно?

onstat-
Да кстате этот работает пока только под unix.
Если нужно будет под M$ для прикладного програмиста
интерфейс не поменяется.

Интересно будет посмотреть, что вы будете менять, тк тут как раз спорят в каком месте хранить изменяемые части и как их реализовывать.

onstat-
Полный код вы скоро сможете найти в проекте OpenDSA,
когда он выйдет. Концептуальное обсуждение проекта пока здесь
http://www.sql.ru/forum/actualthread.aspx?tid=185115
Вы только ошибки в каментах поправьте. Многовато. Гляну на весь код, когда появится.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33125096
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-Я просил конструктивно.

А что есть принципиальная разница?

Так вот из-за подобной разницы тут весь сыр-бор и произошел. А нужно ли заворачивать в классы sockets & threads API?
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33125127
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Землекоп



onstat-
Да кстате этот работает пока только под unix.
Если нужно будет под M$ для прикладного програмиста
интерфейс не поменяется.

Интересно будет посмотреть, что вы будете менять, тк тут как раз спорят в каком месте хранить изменяемые части и как их реализовывать.


А храниться они будут в разных файлах,
и собираться подключаться по принципу как описал AndreiNz
выше.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33125141
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-А храниться они будут в разных файлах,
и собираться подключаться по принципу как описал AndreiNz
выше.

Вот тогда мы посмотрим на реализацию и подвергнем резкой критике, если создадите что-нибудь типа

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#ifdef _UNUX

pThread = new CThreadUnix;

#endif

#ifdef _Windows

PThread = new CThreadWindows;

#endif
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33125151
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Землекоп wrote:
> Так вот из-за подобной разницы тут весь сыр-бор и произошел. А нужно ли
> заворачивать в классы sockets & threads API?

мне вот нужно.
легко, при необходимости, могу отнаследовать класс и от потокового
класса и от сокетного одновременно, и иметьь работу с сокетом в
отдельном потоке.
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33125168
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat
А храниться они будут в разных файлах,
и собираться подключаться по принципу как описал AndreiNz
выше.

Что под этим понимаешь ? если то как предлагал AndreiNz то за такое могут дать по ушам и правильно сделают :)

А вообще читаемоскь кода имхо оставляет желать лучшего.

Object* arr[MAX_PATH]
- опять же надо смотреть. Если arr не отвечает за хранение Object то нормально, если же что то типа


arr = new ConcreteObject();

..
delete arr;

то я б тоже за это по ушам дал :) Только
std::vector<shared_ptr<Object> > arr_;

Вобщем надо смотреть полный код и разбираться
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33125170
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_k
Землекоп wrote:
> Так вот из-за подобной разницы тут весь сыр-бор и произошел. А нужно ли
> заворачивать в классы sockets & threads API?

мне вот нужно.
легко, при необходимости, могу отнаследовать класс и от потокового
класса и от сокетного одновременно, и иметьь работу с сокетом в
отдельном потоке.


Создайте структуру, куда занесите необходимые переменные и передайте ее в thread. Далее передавайте структуру при вызове ваших специфических функций в качестве параметра. Будет также легко.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33125177
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Землекоп wrote:
> alex_k
>
> Землекоп wrote:
> > Так вот из-за подобной разницы тут весь сыр-бор и произошел. А нужно ли
> > заворачивать в классы sockets & threads API?
>
> мне вот нужно.
> легко, при необходимости, могу отнаследовать класс и от потокового
> класса и от сокетного одновременно, и иметьь работу с сокетом в
> отдельном потоке.
>
>
>
> Создайте структуру, куда занесите необходимые переменные и передайте ее
> в thread. Далее передавайте структуру при вызове ваших специфических
> функций в качестве параметра. Будет также легко.
но это разная легкость :-)
мне удобнее думать о любой сущности как о объекте и чтобы синтаксис
языка мне в этом помогал
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33125185
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Землекоп onstat-А храниться они будут в разных файлах,
и собираться подключаться по принципу как описал AndreiNz
выше.

Вот тогда мы посмотрим на реализацию и подвергнем резкой критике, если создадите что-нибудь типа

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#ifdef _UNUX

pThread = new CThreadUnix;

#endif

#ifdef _Windows

PThread = new CThreadWindows;

#endif


Мне не удалось увидеть конструктивной критики
этого подхода.
Так в чем его недостатки?
О достоинствах я знаю.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33125192
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_k
но это разная легкость :-)
мне удобнее думать о любой сущности как о объекте и чтобы синтаксис
языка мне в этом помогал


Структура, если особенно не углубляться, тот же класс, только члены у структуры по умолчанию public. Разве еще на -> сэкономите внутри класса.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33125198
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-Мне не удалось увидеть конструктивной критики
этого подхода.
Так в чем его недостатки?
О достоинствах я знаю.

Так мы же вашего подхода не узрели Кусок h-файла для одного класса - не открыл нам завесы мудрых планов.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33125247
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Землекоп onstat-Мне не удалось увидеть конструктивной критики
этого подхода.
Так в чем его недостатки?
О достоинствах я знаю.

Так мы же вашего подхода не узрели Кусок h-файла для одного класса - не открыл нам завесы мудрых планов.


Так я и вашего подхода в исходниках не видел до сих пор.

Даже на том уровне абстракции, который предоставил я.

Ваш ход .

Потом будем обсуждать.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33125262
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat- Землекоп onstat-Мне не удалось увидеть конструктивной критики
этого подхода.
Так в чем его недостатки?
О достоинствах я знаю.

Так мы же вашего подхода не узрели Кусок h-файла для одного класса - не открыл нам завесы мудрых планов.


Так я и вашего подхода в исходниках не видел до сих пор.

Даже на том уровне абстракции, который предоставил я.

Ваш ход .

Потом будем обсуждать.

Для threads вот мой подход
/topic/187358&pg=2#1604298
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33125270
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интегратор Во первых я не вижу аргументации, а во вторых переносимы на программы на С++ надругие компиляторы ? Не хотелось бы вас расстраивать - но переносимы с большой натяжкой. В нашем 21 веке когда есть managed код писать на unmanaged C++ просто нелепо и смешно .

Oracle Database на 28 платформах. Мы у себя пишем софт одновременно на несколько платформ.

А на сколько платформ переносится managed код ? unix ? Mac ?
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33125284
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LepsikOracle Database на 28 платформах. Мы у себя пишем софт одновременно на несколько платформ.

По-моему, Oracle уже почти весь на Java написан. Так это и есть managed код
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33125287
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Землекоп alex_k
но это разная легкость :-)
мне удобнее думать о любой сущности как о объекте и чтобы синтаксис
языка мне в этом помогал


Структура, если особенно не углубляться, тот же класс, только члены у структуры по умолчанию public. Разве еще на -> сэкономите внутри класса.

Стоемость -> по сравнению со стоимость отладки копейки.

1. В структуре вы не сможете переопределить операции +, -, >,<, == ...
2. Переопределить конструктор копирования.
3. А с чисткой памяти за собой в вашем случае вобще полная ж...
Давно одину и туже память освобождали 2 раза? Сколько искали место кто и где ее освобождает?

Эти преймущества С++ очень тяжело переоценить.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33125309
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-1. В структуре вы не сможете переопределить операции +, -, >,<, == ...


В данной задаче нет необходимости

onstat-
2. Переопределить конструктор копирования.


Важно, если есть пойнтеры среди членов. В принципе, можете написать функцию для копирования структуры.

onstat-
3. А с чисткой памяти за собой в вашем случае вобще полная ж...
Давно одину и туже память освобождали 2 раза? Сколько искали место кто и где ее освобождает?

В C++ c этим проблем хватает. Блоки памяти, на которые не указывает ни один указатель в программе, не удаляются как в Java.

onstat-
Эти преймущества С++ очень тяжело переоценить.


Так что же вы не используете vector вместо массива
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33125315
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Землекоп
Для threads вот мой подход
/topic/187358&pg=2#1604298[/quot]


Код: plaintext
\n\n#ifdef POSIX\n#   include <pthread.h>\n    typedef pthread_t THREAD;\n    typedef void *THREAD_FUNC;\n#   define THREAD_CREATE(tp,fp,ap) (pthread_create((tp),NULL,(fp),(ap)) ? FALSE : TRUE)\n#   define THREAD_JOIN(tp)         pthread_join(tp)\n#   define THREAD_SELF()           pthread_self()\n#   define THREAD_EXIT(sp)         pthread_exit((sp))\n#   define THREAD_ERRNO            (errno)\n\n#elif defined WIN32\n\n#   define THREAD_CREATE(tp,fp,ap) \\\n((*(tp) = (THREAD) _beginthread((fp), 0 ,(void*)(ap))) == (THREAD) - 1  ? FALSE : TRUE)\n#   define THREAD_JOIN(tp)         WaitForSingleObject(*(tp), INFINITE)\n#   define THREAD_SELF()           GetCurrentThreadId()\n#   define THREAD_EXIT(sp)         _endthread()\n#   define THREAD_ERRNO           WSAGetLastError()\n\n

Не увидел ни одного объявления массивов, структур
итд для хранения информации описывающей subj,
Вы же не с одним сокетом работаете.

Без этих обьявлений ваш код - офтопик.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33125324
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Землекоп


Так что же вы не используете vector вместо массива

[/quot]



Землекоп

В данной задаче нет необходимости



Вы очень противоречивы.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33125332
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Землекоп
В C++ c этим проблем хватает. Блоки памяти, на которые не указывает ни один указатель в программе, не удаляются как в Java.
[/quot]

Ну вы даете, почему Ваш код не Java.

Не нужно съзжать в офтопик.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33125359
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-Не увидел ни одного объявления массивов, структур
итд для хранения информации описывающей subj,
Вы же не с одним сокетом работаете.

Без этих обьявлений ваш код - офтопик.

Неконструктивный наезд. Вы же не постите весь код. Это просто пример. Вся информация у меня хранится в связном списке структур (легко делается без всякого С++) и удаляется при завершении витка. При соединение создается структура параметров, которая передается в thread и заносится в linked list. Я всегда знаю сколько у меня серверных соединений и их состояние.
В принципе, я не обхожусь уж совсем без c++. Для чистых приложений под Windows я использую MFC, а там есть уже готовые классы для сокетов и threads. Для сложных кросплатформенных frontend GUI клиентов частично использую Qt. Свои классы для обертывания сокетов и витков писать не имеет смысла, тк все давноо прописано. Для критических по времени приложений будет лучше С. В любом случае С++ нет встроенных в язык средств синхронизации между threads. Java более подошла бы. Если нужна скорость и простота в разработке сложной системы клиент-сервер, то web server - готовое решение, которое использует большинством разработчиков в этом мире.
...
Рейтинг: 0 / 0
25 сообщений из 123, страница 4 из 5
Форумы / C++ [игнор отключен] [закрыт для гостей] / Программирование работы сервера с множеством клиентов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]