|
|
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Всем привет, Подскажите, пожалуйста, принцип решения следующей задачи,- У меня есть сетевой TCP/IP сервер и куча TCP/IP клиентов. Мне нужно обеспечить перманентное взаимодействие между клиентами и сервером, при этом клиенты обращаются к серверу беспорядочно. Я, допустим, могу решить это за счет либо выделения каждому соединению своего порта, либо за счет создания одного управляющего соединения, а другого общего (через какое идут данные с разных сокетов). Не хочу ошибиться, и поэтому хотелось бы знать общепринятые способы решения аналогичных проблем (только для мультиплатформенного кода с BSDSockets/WinSocks, без компонентов и иже с ними). PS: Также подскажите пожалуйста возможна ли мешанина байтов при одновременной посылке данных с разных клиентов на один и тот же сокет, или там действует система очереди. Заранее спасибо за любой ответ. С Уважением, Иванов Артем, www.cubereality.com ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2005, 18:26 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
lexlutherЯ, допустим, могу решить это за счет либо выделения каждому соединению своего порта Это делает сокетная библиотека автоматически. У сервера один порт, у каждого клиента свой. Порт клиента назначается автоматически из свободного пула портов, если его не задавать самому. Фактически каждый сокет содержит информацию о номере локального порта и удаленного с его ip-адресом. Идентификация однозначная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2005, 18:38 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
lexlutherЯ, допустим, могу решить это за счет либо выделения каждому соединению своего порта, Ни в коем случае. Сервер слушает ОДИН порт - сколько бы клиентов одновременно не пришло к нему. На каждого клиента сам драйвер протокола TCP/IP будет создавать "соединение" и разбираться какой байт от какого клиента пришел, и кому что отправлять. Обычно, на стороне сервера для каждого клиента создается отдельный процесс который получает на вход уже созданое соединение с клиентом. И каждый процесс общается с клиентом как будто других клиентов несуществует. Вот эти "соединения" и называются в TCP/IP сокетами. lexluther либо за счет создания одного управляющего соединения, а другого общего (через какое идут данные с разных сокетов). В принципе один клиент может приходить к серверу по двум-трем-четырем и тд портам одновременно. Если конечно это нужно :) Но на каждый слушающий порт для каждого из клиентов будет создано одно соединение. Например FTP работает по двум портам, предположим что к серверу пришли пять клиентов - будет создано десять соединений (сокетов). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2005, 18:58 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
1 Разберитесь с socket API socket(), listen(), accept(), connect() и тд. 2. Напишите два класса ListeningSocket & ConnectedSocket, можно унаследывать их от одного базового MySocket. Или ищите все это на Интернете. Если не хотите зависимосто ит платформы, то Вам нельзя пользоваться всякими WSSoket-ами. Но полная независимость у Вас врядли получится. Поэтому можете использовать интерфейсы interface или абстрактные классы, что в прицыте почти одно и тоже. 3. Создавть отдельный процесс на каждое соединение довольно накладно. Стандартное решение - использовать Thread или как их еще называит потоки. Разберитесь с этим вопросом очень хорошо. 4. Не помешает хорошое знание объектно-ориентированного программирования в C++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2005, 09:27 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
AndreiNzНо полная независимость у Вас врядли получится. Поэтому можете использовать интерфейсы interface или абстрактные классы, что в прицыте почти одно и тоже. Во всем мире получается без всяких интерфейсов и абстрактных классов на обычном С AndreiNz 4. Не помешает хорошое знание объектно-ориентированного программирования в C++. Не имеет отношения к сокетам совсем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2005, 09:55 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Можно, конечно и на обычном С написать, только стоит ли скатываться до технологий прошлого тысячелетия? ;) Ведь С++ был разработан как более хороший, читай лучший С. Да и форум этот посвящен С++ а не С. На С сейчас, а не двадцать лет назад, пишут в основном только встроенные системы, ну там чайником управлять или пылесосом. Да еще индивидумы, которые не в состоянии осилить разницу между классом и объектом;) А разница между С и С++ как раз в объектно ориентированном программировании. Это то, что делает С++ лучше, чем С. Поэтому, чем лучше владеешь этими свойсвами языка, тем более эффективные, гибкие и легко поддерживаемые системы создаешь. Все что я написал, как раз основанно на моем собственном опыте разработки подобных серверов. И это не такая простая задача, которую можно решить простым наскоком. Объектно-ориентированное программирование может существенно упростить ее решение. А вопрос вообще-то был про сервера в целом, а не о сокетах... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2005, 21:40 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
AndreiNzМожно, конечно и на обычном С написать, только стоит ли скатываться до технологий прошлого тысячелетия? ;) Ведь С++ был разработан как более хороший, читай лучший С. Да и форум этот посвящен С++ а не С. с++ с тем же успехом является технологией прошлого тысячелетия AndreiNz На С сейчас, а не двадцать лет назад, пишут в основном только встроенные системы, ну там чайником управлять или пылесосом. Не всегда. Если нужно быстродействие, то используют чистый С. Часть сервера, которая отвечает за соединение - это самая критическая часть. Особенно, если количество клиентов, которые могут быть подключены, достаточно велико. AndreiNz А разница между С и С++ как раз в объектно ориентированном программировании. Это то, что делает С++ лучше, чем С. Поэтому, чем лучше владеешь этими свойсвами языка, тем более эффективные, гибкие и легко поддерживаемые системы создаешь. Это верно для бизнес логики, но бессмысленно в данном случае. Тут будет один виток с accept, в котором при соединение будет создаваться новый виток для ослуживания это соединения. Я не вижу повода выпендриваться, что бы доказать свою приверженность ООП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2005, 22:26 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
AndreiNzМожно, конечно и на обычном С написать, только стоит ли скатываться до технологий прошлого тысячелетия? ;) Ведь С++ был разработан как более хороший, читай лучший С. Да и форум этот посвящен С++ а не С. Ню-ню... Более хороший значит? Это с каких пор мешанина технологий стала более лучшей чем одна, стройная система? AndreiNzВсе что я написал, как раз основанно на моем собственном опыте разработки подобных серверов. И это не такая простая задача, которую можно решить простым наскоком. Да, для С++ это не такая простая задача. А для С - элементарная :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2005, 22:56 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Сервер слушает один порт - при подключении очередного клиента открывается клиентский сокет и для работы с клиентом создаётся новый серверный поток управления. По моему совершенно классическая задача, подробно расписанная в любой серьёзной книге по сетевому программированию. Есть хорошая книга "Программирование с сетях Windows 2000". Ещё есть замечательная книженция Программитрование TCP/IP в стандарте posix что ли называется - такая жёлтенькая - из трёхтомной серии ... Валяется где - то в бумажном, если надо могу точно прсмотреть название/авторов - книга крайне полезная для любого программиста, связанного с сокетами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2005, 09:50 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
AndreiNzМожно, конечно и на обычном С написать, только стоит ли скатываться до технологий прошлого тысячелетия? ;) Ведь С++ был разработан как более хороший, читай лучший С. Да и форум этот посвящен С++ а не С. Приехали... На С тоже можно писать в ООП - стиле и причём тут технологии прошлых тысячилетий не понимаю... На С сейчас, а не двадцать лет назад, пишут в основном только встроенные системы, ну там чайником управлять или пылесосом. Да еще индивидумы, которые не в состоянии осилить разницу между классом и объектом;) Не надо строить из всех дураков - всех кого я знаю из программистов чистого С - прекрасные специалистами, чего я бы не сказал про множество разработчиков С# не понимающих толком даже что такое виртуальная таблица ;) Это не касается всех - просто в среднем так выходит... А разница между С и С++ как раз в объектно ориентированном программировании. Это то, что делает С++ лучше, чем С. Поэтому, чем лучше владеешь этими свойсвами языка, тем более эффективные, гибкие и легко поддерживаемые системы создаешь. При недостаточно глубоком знании ООП и тонкостей его реализации на текущей платформе ничего хорошего не сделаешь. На С что делаешь то и получаешь - всё предельно прозрачно. И это не такая простая задача, которую можно решить простым наскоком. Согласен, хотя не такая и уж сверхсложная Объектно-ориентированное программирование может существенно упростить ее решение. А вопрос вообще-то был про сервера в целом, а не о сокетах... Опять ООП приплёл - и опять не к месту:). Разработать граммотную структуру приложения в ООП стиле на порядок сложнее чем в смешанном - процедурный + элементы ООП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2005, 09:59 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
White Owl Да, для С++ это не такая простая задача. А для С - элементарная :) Чушь абсолютная, вы бы хотябы подумали перед тем как писать. Я просто не допускаю, что вы настолько нероффесионал, что способны сделать подобное завление подумавшию Язык С являетсяся подмножеством языка С++. Практически все, что написанно на С может быть включено в текст программы написанной на С++. Ну а если уж сильно приспичет то есть синтакс extern C. Так что опустится до уровня С всегда можно. Только вот стоит ли? White Owl Ню-ню... Более хороший значит? Это с каких пор мешанина технологий стала более лучшей чем одна, стройная система? У вас, возможно, это называется мешаниной технологий, а у других это называется прогрессом. И в том, что разработчики языка решили сохранить совместимость с базовым С нет ничего плохого. Как и нет ничего плохого в самом С. Только разработка на нем высоко трудоемка - и это его основной недостаток. А то, что С++ это лучший С сказал не я. Bjarne Stroustrup: C++ is designed to be "a better C," to support data abctruction, and to support object-orientated programming. (The C++ programming language second edition). Так что книжки надо читать, тогда и в голове мешанины не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2005, 13:36 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
White OwlЭто с каких пор мешанина технологий стала более лучшей чем одна, стройная система? бысренько расшифруем что такое "мешанина понятий" и "стройная система" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2005, 13:58 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Землекоп Не всегда. Если нужно быстродействие, то используют чистый С. Когда нужно быстродействие такие фирмы как Микрософт и Борланд используют ассемблер. Покопайтесь в исходниках и вы найдете немало ассемблерного кода там где должен быть только С. Правда в данном случае о переносимости не говорят. Как бы вам это не нравилось, но ассемблер всегда был, есть и будет эффективнее С в работе с процессором и с памятью. И хотя можно предсказать какой ассемблерный код сгенерирует компилятор, вы не сможете его оптимизировать оперируя командами языка С. Вы так же не сможете указать компилятору какю машинную инструкцию использовать в том или ином случае. Это все привилегия ассемблера. Ну а теперь о том как мы будем делать сервер. Как вы правильно заметили надо создать виток, только я его буду называть Thread, как в первоисточнике. Здесь вас и поджидает первая проблемка. Чтобы создать Thread в Windows вам надо вызвать комманду API CreateThread(). В UNIXe эта команда работать явно не будет. Что делает в таком случае программист С? Правильно он начинает вставлять директивы препроцессора #ifdef, #ifndef и тд. Этими директивами будет утыкан весь ваш проэкт и часто будет сложно определить в какой части кода (UNIXовской или Windowsкой) вы находитесь, особенно, если вы будете вызывать подпрограммы. А вы неприменно будете это делать даже в не очень сложном проэкте. Какие опции есть у С++ ника? Он тоже будет пользоваться директивами препроцессора, а как же без этого. Только у него есть возможность сушественно сократить их колличество. Как? Относительно просто. Создаем абстрактный класс CThreadInterface в котором определены функции которые должны воплощать наследники, а сам класс этого делать не должен. Делается это так: class CThreadInterface { public: virtual int Execute() = 0; virtual void Suspend() = 0; virtual void vResume() = 0; . . CThreadInterface(); virtual ~CThreadInterface(); } =0; здесь указывает, что функция не реализуется в данном классе и ее обязанны реализовать наследники. От этого класса наследуете два других: CThreadWindows и CThreadUnix в которых вы создаете и манипулируете Thread так как это положенно делать в UNIX и Windows соответственно. Вся прелесть в том, что специфика теперь разделена в отдельные классы, которые могут и по хорошему должны находиться в разных файлах. У вас больше нет мешанины кода. Каждая функция ассоциированна с классом, имя которого говорит вам с каким вариантом вы работаете. Теперь как использовать данные классы. 1. Создаете указатель (можно создать и ссылку) на базовый класс: CTheadInterface *pThread; затем создаете объект, но уже специфического типа. Абстрактные классы нельзя создавать. Здесь вам пригодятся директивы препроцессора: #ifdef _UNUX pThread = new CThreadUnix; #endif #ifdef _Windows PThread = new CThreadWindows; #endif А манирулируете вы уже указателем pThread->Resume(); pThread->Suspend(); И тд. И это называется полиморфизмом. Таким же образом можно и нужно решать несовместимость API синхронизации Thread-ов, да и сокеты, хотя там и есть общий API, на самом деле лучше реализовать с учетом особенностий реализаций как в UNIX так и в Windows ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2005, 14:25 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
AndreiNz White Owl Да, для С++ это не такая простая задача. А для С - элементарная :) Чушь абсолютная, вы бы хотябы подумали перед тем как писать. Я просто не допускаю, что вы настолько нероффесионал, что способны сделать подобное завление подумавшию Язык С являетсяся подмножеством языка С++. Практически все, что написанно на С может быть включено в текст программы написанной на С++... Речь не о том, что "круче" - С или С++. Просто данная задача легко решается на обычном чистом С, знаний принципов работы сокетов здесь вполне достаточно. Углубляться в детали ООП и городить огород в виде иерархии классов именно в данной задаче ... Зачем? Т.е. может оно кому будет и полезно, но прописывать это как рецепт... Хм... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2005, 14:35 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Интегратор Приехали... На С тоже можно писать в ООП - стиле и причём тут технологии прошлых тысячилетий не понимаю... Очень хотелось бы посмотреть на примерчик. Ну как, например, в С вы реализуете полиморфизм. Или инкапсуляцию... Ну наследственность, наверно, можно сляпать используя табличные функции.. Не надо строить из всех дураков - всех кого я знаю из программистов чистого С - прекрасные специалистами, чего я бы не сказал про множество разработчиков С# не понимающих толком даже что такое виртуальная таблица ;) Это не касается всех - просто в среднем так выходит... Не надо обобщать! По-вашему выходит, что С язык хороший, потому, что на нем пишут хорошие специалисты, а вот C# плохой, так как ихние программисты не знают что такое vTable. А как много ваших хороших специалистов знают что такое vTable? Да я понимаю, что оно им не нужно. На самом деле я сам считаю, что С++ лучше шарпа. Уж больно я не люблю, когда за меня кто-то решает, что мне можно делать а чего нельзя. При недостаточно глубоком знании ООП и тонкостей его реализации на текущей платформе ничего хорошего не сделаешь. На С что делаешь то и получаешь - всё предельно прозрачно. Опять ООП приплёл - и опять не к месту:). Разработать граммотную структуру приложения в ООП стиле на порядок сложнее чем в смешанном - процедурный + элементы ООП Так с дуру можно и шею сломать. (Подставте нужное слово). А так в нашей проффессии приходится постоянно учиться новому. И отказ от этого ведет в никуда. Вы просто не сможете в очередной раз найти работу. Согласен, хотя не такая и уж сверхсложная А никто и не говорил, что она сверхсложная. Но синхронизацию Thred-ов знать нужно, я уже не говорю о том, что надо понимать, что такое Thread и чем она отличается от процесса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2005, 14:51 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
AndreiNz Чтобы создать Thread в Windows вам надо вызвать комманду API CreateThread(). В UNIXe эта команда работать явно не будет. Что делает в таком случае программист С? Правильно он начинает вставлять директивы препроцессора #ifdef, #ifndef и тд. Этими директивами будет утыкан весь ваш проэкт и часто будет сложно определить в какой части кода (UNIXовской или Windowsкой) вы находитесь, особенно, если вы будете вызывать подпрограммы. Не весь, а только один .h файл. Я как раз принимаю участие в разработке системы передачи данных, которая должна работать под Linux, Solaris и Win32 платформами. Вместо прямого вызова функции вызывается макрос, который определяется в .h файле в зависимости от платформы. В с-файлах ifdef, редкость, которую изводят при первой возможности. Можно просто прописать библиотеку-прослойку для каждой платформы. И главный модуль писать на API прослойки. AndreiNz #ifdef _UNUX pThread = new CThreadUnix; #endif #ifdef _Windows PThread = new CThreadWindows; #endif Меня бы за такое выпороли. Это сводит на нет все преимущества ООП. В программе должен быть один класс CThread c с методами типа. Реализация уже может содержать ifdef для подключения соотвествующего платформе API и не должна волновать прикладного программиста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2005, 15:01 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
redskin Речь не о том, что "круче" - С или С++. Просто данная задача легко решается на обычном чистом С, знаний принципов работы сокетов здесь вполне достаточно. Углубляться в детали ООП и городить огород в виде иерархии классов именно в данной задаче ... Зачем? Т.е. может оно кому будет и полезно, но прописывать это как рецепт... Хм... Во-первых ваша программа будет намного лучше структурированна. А это значит, что расширять и поддерживать ее будет легче. Вы просто не будете скакать по всем фаилам, когда вам нужно будет сделать какое-то изменение. Во-вторых в ООП гораздо лучше реализуется повторное использование кода (или как это сейчас называется по-русски?). В-третьих, вы можете использовать библиотеки классов поставляемые с компилятором STL (стандартная библиотека шаблонов) является частью стандарта языка С++ и должна быть в составе любого компилятора претендующего на соответствие стандарту. Плюс MFC и ATL от Микрософта и OWL от Борланда. В-четвертых в MSDNе есть пример чатовой программы, которая может быть примером для построения подбного сервер, только не переносимого так как они используют serialisation. Но сама идея может быть воплощена в любой системе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2005, 15:08 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Землекоп, Тот кто собирается вас пороть просто не понимает объектно-ориентированного программирования. Он наверное где-то его учил, но так и не понял до конца. Оно - это прежде всего абстрации и и строгая привязка поведения к состоянию state and behaviar. Каждый класс должен делать только свою работу и быть независим от других настолько насколько это возможно. В приведенном мною примере полиморфизм как раз и позволяет вам отделить разные классы ответственные за разную специфику работы. Еще более эффективным полиморфизм может быть с сочетании с использованием контейнеров list, vector, dequque, map и тд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2005, 15:21 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
AndreiNzЗемлекоп, Тот кто собирается вас пороть просто не понимает объектно-ориентированного программирования. Он наверное где-то его учил, но так и не понял до конца. Оно - это прежде всего абстрации и и строгая привязка поведения к состоянию state and behaviar. Каждый класс должен делать только свою работу и быть независим от других настолько насколько это возможно. В приведенном мною примере полиморфизм как раз и позволяет вам отделить разные классы ответственные за разную специфику работы. Тут важнее инкапсуляция, что бы скрыть детали реализации, особенно зависящие от платформы. AndreiNz Еще более эффективным полиморфизм может быть с сочетании с использованием контейнеров list, vector, dequque, map и тд. Я оставлю для комментариев других людей эту умную фразу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2005, 15:33 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
AndreiNz redskin Речь не о том, что "круче" - С или С++. Просто данная задача легко решается на обычном чистом С, знаний принципов работы сокетов здесь вполне достаточно. Углубляться в детали ООП и городить огород в виде иерархии классов именно в данной задаче ... Зачем? Т.е. может оно кому будет и полезно, но прописывать это как рецепт... Хм... Во-первых ваша программа будет намного лучше структурированна. А это значит, что расширять и поддерживать ее будет легче. Вы просто не будете скакать по всем фаилам, когда вам нужно будет сделать какое-то изменение. Мои программы и так ничего себе структурированы, спасибо Во-вторых в ООП гораздо лучше реализуется повторное использование кода (или как это сейчас называется по-русски?). Да, это то все понятно, но не думаю, что автор топика рассчитвал на лекцию о плюсах и минусах ООП. Был задан конкретный вопрос (я тоже ничего по теме не написал, так оффтопик и флуд, каюсь :)) и он к ООП имеет мало отношения, согласитесь. Похожие задачи разбираюся в любой серьезной книжке по программированию сетевых приложений, и авторы в них, что характерно, (тот же Стивенс, например) обходились чистым С. Все остальное - stl, mfc, atl, owl (этот то динозавр каким образом тут всплыл?) к теме имеют весьма опосредованное отношение. Любая технология - это средство, инструмент, а не самоцель. Если разработчик владеет ООП, он сам накрутит классов вокруг сокетов (или использует готовые решения такого типа), если нет, реализует на чистом socket api и тоже будет счастлив... Говоря проще, я услышав исходный вопрос, посоветую читать Стивенса. Вы - Буча и Страуструпа.... Чья точка зрения правильней? Не знаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2005, 15:34 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
AndreiNz Не надо обобщать! По-вашему выходит, что С язык хороший, потому, что на нем пишут хорошие специалисты, а вот C# плохой, так как ихние программисты не знают что такое vTable. А как много ваших хороших специалистов знают что такое vTable? Да я понимаю, что оно им не нужно. На самом деле я сам считаю, что С++ лучше шарпа. Уж больно я не люблю, когда за меня кто-то решает, что мне можно делать а чего нельзя. Как раз cпецы по С которых я знаю прекрасно представляют как устроена VTable и почему она именно так устроена. Многоуважаемый - то что вы пишете про ООП - десткий лепет человека недавно освоившего ООП, точнее начавшего осваивать. Думаю что большинство участников этой ветке не хуже вас как минимум знают ООП - просто они как люой разумный человек решают задачу адекватно требованием/объёму работ и времени на решение а не выпендриваются ;). А тепепь поехали #ifdef _UNUX pThread = new CThreadUnix; #endif #ifdef _Windows PThread = new CThreadWindows; #endif для меня это типичный пример программирования в стиле С Если уж хочется показать знание ООП то хотя бы фабрику классов наваял что - ли... Во-первых ваша программа будет намного лучше структурированна. А это значит, что расширять и поддерживать ее будет легче. Вы просто не будете скакать по всем фаилам, когда вам нужно будет сделать какое-то изменение. Блин - да какое имеет отношение ООП к структурировани. проекта ??? ИМожно напартачить бред как с ООП так и без ООП - причём с ООП ошибится гораздо проще. Посмотрите исходники винды на С - прекрасно формленный и хорошо структурированный код в ООП-стиле на голом С :) В-третьих, вы можете использовать библиотеки классов поставляемые с компилятором STL (стандартная библиотека шаблонов) является частью стандарта языка С++ и должна быть в составе любого компилятора претендующего на соответствие стандарту. Плюс MFC и ATL от Микрософта и OWL от Борланда. Елки - палки - опять приехали ! А кто запрещает писать в процедурном стиле и ими пользоваться - не в мультипарадигмости разве сила и гибкость С++ ?! В-четвертых в MSDNе есть пример чатовой программы, которая может быть примером для построения подбного сервер, только не переносимого так как они используют serialisation. Но сама идея может быть воплощена в любой системе. Молодец конечно что ты хнаешь слово serialization, но в инете есть на порядок более удобные для изучения примеры и граммотно сделанные. Еще более эффективным полиморфизм может быть с сочетании с использованием контейнеров list, vector, dequque, map и тд. После столь неграммотных заявлений с Вами сложно будет спорить :) Какой связь полиморфизма со стандартными контейнерами вы усмотрели ??? Объясните нам тёмным - будьте добры ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2005, 16:07 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
[quot redskinГоворя проще, я услышав исходный вопрос, посоветую читать Стивенса. Вы - Буча и Страуструпа.... Чья точка зрения правильней? Не знаю [/quot] Поддерживаю ! ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2005, 16:09 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Карабас Барабас White OwlЭто с каких пор мешанина технологий стала более лучшей чем одна, стройная система? бысренько расшифруем что такое "мешанина понятий" и "стройная система" Прошу прощения, но я сказал "мешанина технологий" а не "понятий". Читай внимательнее. С - процедурный язык с макроподстановками. Все. А современный С++ это смесь процедурного, объектного и макроподстановочного подхода. Плюс возможность использования кусков на чистом С. Имено это я и называю мешаниной технологий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2005, 18:02 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
White Owl А современный С++ это смесь процедурного, объектного и макроподстановочного подхода. Плюс возможность использования кусков на чистом С. Имено это я и называю мешаниной технологий. Ну как программист вы хорошо понимаете что возможность мультипарадигмной разработки - это минус для не очень опытного разработчика, так как позволяет слишком много напартачить и большой плюс и дополнительная гибкость для специалиста :). Так что смотря какая задача ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2005, 21:52 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Землекоп, Я, наверное, не совсем понятно объяснил. Вы декларируете абстрактный объект и манипулируете им. А создаете конкретный, зависящий от платфлормы. Тоесть если вы хотите передать свой объект функции, то вы передаете указатель на CThreadInterface. Например: void DoSomething( CThreadInterface *pThread){ pThread->Resume(); } В таком случае потребители вашего объекта не знают как он реализован. Им достаточно знать что это реализованно и только. Единственное место где различие между Windows и Unix реализацией имеет значение - это когда вы создаете объект. Инкапсуляция не даст вам того уровня абстракции, который даст полиморфизм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2005, 22:13 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
redskin Любая технология - это средство, инструмент, а не самоцель. Если разработчик владеет ООП, он сам накрутит классов вокруг сокетов (или использует готовые решения такого типа), если нет, реализует на чистом socket api и тоже будет счастлив... Замечательная фраза ;) На ней можно закончить этот флейм... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2005, 22:56 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
ИнтеграторНу как программист вы хорошо понимаете что возможность мультипарадигмной разработки - это минус для не очень опытного разработчика, так как позволяет слишком много напартачить и большой плюс и дополнительная гибкость для специалиста :). Все верно. Однако и очень-очень-очень опытному напортачить будет проще :) Вон пример перед глазами - AndreiNz. Вроде местами он и прав, но руки за такие решения отрывать надо по самые плечи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2005, 23:03 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
White OwlВсе верно. Однако и очень-очень-очень опытному напортачить будет проще :)Вон пример перед глазами - AndreiNz. Вроде местами он и прав, но руки за такие решения отрывать надо по самые плечи. AndreiNz больше похож на аналиста, теоретика программирования или преподавателя, но не на программиста практика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2005, 23:20 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Интегратор, вы хоть представляете, что такое фабрика класса? Это design pattern причем creation pattern. Какая разница, как я создаю объект в простом примере. Фабрика класса только бы усложнила бы этот пример. Вот где действительно легко наворочить дров, так это воплащая design patterns. Я как раз сейчас работаю в фирме, котора в свое время увлекалась этим делом. Окончилось это тем, что большая часть этих pattern-ов была убранна, потому что жрет очень много ресурсов. Но и сейчас в коде довольно часто встречаются singleton-ны и всякие там observer-ры ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2005, 23:38 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
AndreiNzИнтегратор, вы хоть представляете, что такое фабрика класса? Это design pattern причем creation pattern. Какая разница, как я создаю объект в простом примере. Фабрика класса только бы усложнила бы этот пример. Вот где действительно легко наворочить дров, так это воплащая design patterns. Я как раз сейчас работаю в фирме, котора в свое время увлекалась этим делом. Окончилось это тем, что большая часть этих pattern-ов была убранна, потому что жрет очень много ресурсов. Но и сейчас в коде довольно часто встречаются singleton-ны и всякие там observer-ры Ну если тупо пихать паттерны везде где можно, как например вы делаете с ООП, то последствия неcложно предугадать Что фирма то производит - очень хочется знать с какой продукцией ни в коем случае нельзя связываться ? А вот чем вас не устраивает такой код как альтенатива вашему я совсем не понимаю :) Код: plaintext 1. 2. PS Честно говоря я бы потоки вообще не в heap-е создавал - посмотрите например как это делаетсчя во всех нормальных либах (тот же boost, ZThreads, wxWindows) :) - но раз уж так вас хочется ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2005, 23:07 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
White OwlПрошу прощения, но я сказал "мешанина технологий" Прошу прощения, очепятка вышла, действительно, надо хотя бы свои посты внимательнее читать :) А вобще - чем меньше свободы предоставляет компилятор, тем хуже программисту. А если кому-то не нравится, что что-то есть еще кроме того, что ему нужно и интересно - то никто не заставляет его использовать это в своих проектах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 07:13 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Если как альтернатива моему примеру, то абсолютно ни чем не устраивает. Вы наверное полагаете, что фабрика класса сама будет создавать объекты и никакой начинки в ней писать не надо. Если же серьезно, то внутри метода create() того объекта указатель на который вернет статическая функция Instance() все сведется к тем же #ifdef-ам. Только пример это не сделает более понятным. Вам придется объяснять как работает class factory и приводить текст функции create() как минимум. А теперь давайте задавать вопросы. Q: Сократит ли наличие фабрики класса колличество кода, которы надо писать, понимать и поддерживаь? A: Нет, скорее увеличит. Q: Улучшит ли наличие фабрики класса повторное использование кода (code reuse)? A: Ненамного, вы будете создавать thread , по большому счету в двух местах. 1. вы создадите слушающую thread. 2. Вы будете создавать новую thread на каждое новое соединение, но будете делать это в одном и том же месте. Q: Увеличит ли это эффективность программы? A: Уменьшит, но не существенно. Q: Что же тогда улучшит наличие фабрики класса? A: Элегантность программы. Q: А на хрена козе баян? Конечно можно создавать объект как на хипе, так и на стеке, просто я посчитал, что пример с использованием хипа будет более понятным. Теперь о том, что делает фирма. Она много чего делает. В частности она делает так называемый такую программу. Когда у вас гаснет электричество, вы начинаете звонить тому, кто вам это электричество поставляет. Так вот наш софт позволяет отсортировать огромную массу звонков и пропустить операторам, только те, которые действительно несут полезную информацию. Другой продукт позволяет отслеживать и передавать по радио и каналам мобильной телефонной связи задания на и текущее состояние аванийных и плановых работ в электроэнергетике. Третий позволяет отслеживать местонахождение местонахождение транспортных средст и собирать с них дополнительную информацию(скорость, температуры и тд.). Компания продает свои продукты в основном в США, Канаду, Австралию, Новую Зеландию. Российских клиентов у нас нет и за рубли мы не торгуем. Более того я, наверное, единственный человек в компании, кто знает, что такое рубль. Так что, если решите покупать продукцию нашей фирмы, подумайте, может вам стоит купить небольшую электростанцию или всю американскую береговую охрану для начала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2005, 12:31 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
AndreiNz Инкапсуляция не даст вам того уровня абстракции, который даст полиморфизм. Можно ссылочку на первоисточник этой глубой мысли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2005, 12:41 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Во первых создавать потоки на С++ предложенным вами методом и который я повторил в более адекватной форме - бред. Ещё раз - смотрите хорошие либы - там всё сделано правильно :) AndreiNz Если же серьезно, то внутри метода create() того объекта указатель на который вернет статическая функция Instance() все сведется к тем же #ifdef-ам. Только пример это не сделает более понятным. Сделает. Всё зашито в фабрику - как она делает - неважно для клиентского кода. ifdef-ы что в С что в С++ зашиваются в код библиотеки, то позволяет сделать клиентский код абсолютно прозрачным. В клиентском кодже нет ни упоминания что он адаптируется под ту или иную ОС - за это отвечает используемая либа. Это принципиальный момент - так как вы утверждали что ООп позволяет сделать код в случае кроссплатформы проще. ООП здесь непричём совершенно. Q: Сократит ли наличие фабрики класса колличество кода, которы надо писать, понимать и поддерживаь? A: Нет, скорее увеличит. Да - я задействую стандартную фабрику либо напишу обобщённую сам. Если вы не знаете как это сделать - учите матчасть :) Q: Улучшит ли наличие фабрики класса повторное использование кода (code reuse)? Я с вас просто балдею - честное слово. То вы кричите пихайте ООП везде где можно, а то утверждаете что Design Patterns - это зло... Видите ли DP - это не панацея и не магические приёмы которые надо либо использовать либо нет... Если вы дейтсвительно хорошо разбираетесь в ООП и пишете много кода, то у вас эти програмные элементы будут появляться сами собой незвисимо от того прочитади ли вы GoF или нет. Так как паттерны - это прото некоторые хорошо зарекомендовавшиее себя для решения определённых задач программные приёмы, не трюки - а именно приёмы. По крайне мере когда я читал GoF в своё время многие вещи показались очень знакомыми и близкими к реальной практике. Раз вы говорите что то непонятно про эффективность (кстати так и не расшифровав о чём вы говорите), то аподозреваю что вы вообще слабо понимаете что такое паттерны ... По крайней мере утверждение: не пользуйтесь стандартными приёмами звучит довольно странно и дико ... Q: Увеличит ли это эффективность программы? ООП вообще почти всегда уменьшает эффективность программы - тогда зачем вы им пользуейтесь вообще ? Вы начинаете противоречить сами себе. То ура ООП - а то давайте писать проще. Вы уж определитесь чего вы хотите пожалуста. A: Уменьшит, но не существенно. Возможно что вообще никак не изменит если код будет встраиваемым :). A: Элегантность программы. cv. выше. Конечно можно создавать объект как на хипе, так и на стеке, просто я посчитал, что пример с использованием хипа будет более понятным. Пример отвратительный так как предназначался для примера хорошего решения здачи, поставленной автором топика, при этом приведённое решение не выдерживает ни малейшей критики. реклама поскипана... Более того я, наверное, единственный человек в компании, кто знает, что такое рубль. Так что, если решите покупать продукцию нашей фирмы, подумайте, может вам стоит купить небольшую электростанцию или всю американскую береговую охрану для начала. PS Оффтоп. Лучше бы показывали вашу компетентность качественными примерами кода и объяснениями а не громкими абстракными заявления ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2005, 13:50 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
AndreiNzЗемлекоп, Я, наверное, не совсем понятно объяснил. Вы декларируете абстрактный объект и манипулируете им. А создаете конкретный, зависящий от платфлормы. Тоесть если вы хотите передать свой объект функции, то вы передаете указатель на CThreadInterface. Например: void DoSomething( CThreadInterface *pThread){ pThread->Resume(); } А каким образом будет реализовано тело самого витка? Где оно будет объявлено? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2005, 14:33 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
ЗемлекопА каким образом будет реализовано тело самого витка? Где оно будет объявлено? Реализация для Unix будет зашита в классе CThreadUnix Реализация для винды - в CThreadWindows. Далее допустим через год Вас напряглим портировать эту систему на MacOS. Вместо того чтобы ковыряться в исходном коде вы должны будете а) создать новый класс (CMacOSThread)- поток от CThreadInterface и в нем реализовать логику работы. б) в одном месте - при создании обьекта (неважно используют фабрику класов или нет - все равно ГДЕТО #ifdef делать придется - программа под Unix попросту не скомпилится с #include<windows.h>) написать #ifdef _MACOS pThread = new CMacOSThread; #endif И все. Больше ничего(в идеале) трогать не потребуется. Вот вам и преимущества полморфизма над инкапсуляцией если хотите так понимать :-) . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2005, 15:48 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
prof79Реализация для Unix будет зашита в классе CThreadUnix Реализация для винды - в CThreadWindows. Странный подход. А если логика самого витка почти не зависит от платформы, то для чего плодить повторяющийся код. Это что же за ООП такое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2005, 15:55 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Кодер Странный подход. А если логика самого витка почти не зависит от платформы, то для чего плодить повторяющийся код. Это что же за ООП такое? Значит "почти независящее" вынести в отдельную(ые) ф-цию-член CThreadInterface и вызывать ее по месту требования. А "зависящее" - раскидать по наследникам. ЗЫ не принимайте это как совет к действию. Скорее это иллюстрация технологии. Не видя задачи целиком сложно говорить, стОит ли применять эту технологию или легче обойтись чистым С. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2005, 16:03 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
prof79 Кодер Странный подход. А если логика самого витка почти не зависит от платформы, то для чего плодить повторяющийся код. Это что же за ООП такое? Значит "почти независящее" вынести в отдельную(ые) ф-цию-член CThreadInterface и вызывать ее по месту требования. А "зависящее" - раскидать по наследникам. ЗЫ не принимайте это как совет к действию. Скорее это иллюстрация технологии. Не видя задачи целиком сложно говорить, стОит ли применять эту технологию или легче обойтись чистым С. Это "технология" ничего объектно-ориентированного в себе не содержит Чем это отличается от следующего пример ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. Для меня это суть одно и тоже :) Хотя ещё раз отмечу - так НЕ пишут в нормальных проектах. Всё зашивается в библиотечные вызовы, разруливающие все проблемы кроссплатформенности внутри себя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2005, 16:19 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
prof79 Кодер Странный подход. А если логика самого витка почти не зависит от платформы, то для чего плодить повторяющийся код. Это что же за ООП такое? Значит "почти независящее" вынести в отдельную(ые) ф-цию-член CThreadInterface и вызывать ее по месту требования. А "зависящее" - раскидать по наследникам. ЗЫ не принимайте это как совет к действию. Скорее это иллюстрация технологии. Не видя задачи целиком сложно говорить, стОит ли применять эту технологию или легче обойтись чистым С. prof79, вы когда-нибудь витки использовали? Речь идет о методе типа Run в CWinThread в Windows или run() в QThread в Qt. Другими словами я должен иметь некий класс, от которого я могу породить свой собственный реализовав тело витка, которое не будет зависеть от платформы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2005, 16:29 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
ИнтеграторХотя ещё раз отмечу - так НЕ пишут в нормальных проектах. Всё зашивается в библиотечные вызовы, разруливающие все проблемы кроссплатформенности внутри себя. Подпишусь под каждым словом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2005, 16:31 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
ИнтеграторЭто "технология" ничего объектно-ориентированного в себе не содержит Чем это отличается от следующего пример ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. Для меня это суть одно и тоже :) Эта технология содержит в себе главное "обьектное" - виртуальные ф-ции. И как следствие устраняется необходимость в case-ах(в данном случае - ifdef) во всех местах кроме создания обьекта. На минутку представьте себе: допустим над потоками можно производить операции: а) начинать (begin) б) прекращать(stop) в) изменять приоритет(set_prior) г) приостанавливать(pause) д) возобновлять (resume). Добавьте при желании операции по вкусу. Все операции закодированы в разных местах программы (библиотеки). В вашем случае это будет выглядеть приблизительно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. Код: plaintext 1. 2. В одном месте: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. Нашли 10 отличий? Или по прежнему одно и тоже ? Интегратор Хотя ещё раз отмечу - так НЕ пишут в нормальных проектах. Всё зашивается в библиотечные вызовы, разруливающие все проблемы кроссплатформенности внутри себя. А библиотекам как разруливать внутри себя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2005, 16:42 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
prof79А библиотекам как разруливать внутри себя? Вариант номер 1 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Вариант 2 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. ну вот хотя бы так.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2005, 18:21 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
prof79 Код: plaintext 1. 2. 3. 4. 5. 6. 7. Эта технология содержит в себе главное "обьектное" - виртуальные ф-ции. И как следствие устраняется необходимость в case-ах(в данном случае - ifdef) во всех местах кроме создания обьекта. Эта, а что мешает титанам ООП-мысли вынести всю условную компиляцию из кода в скрипты сборки? Достаточно сделать один единственный класс CThread. И повторить его в разных исходниках, исходник win32\CThread.cpp, linux\CThread.cpp, bsd\CThread.cpp, mac\CThread.cpp и так далее.... Если есть сильное желание можно сделать им всем общего родителя CAbstractThread или аналогичный интерфейс, но не обязательно. Нафига делать выбор между платформенными реализациями внутри кода??? Вы б еще в рантайме выбирали какой именно класс создавать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2005, 18:28 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Вот кусок кода для .h файла Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2005, 18:33 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
[quot White Owl Нафига делать выбор между платформенными реализациями внутри кода??? [/quot] :) ну можно ещё с инклудами поиграться Кстати как вариант номер 3 если разрабатываете с нуля всю либу - делаете в обоих либах одинаковые функции и линкуете к проекту либу для той ОС под которую собираете проект :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2005, 18:42 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Молодец, AndreiNz ! Так их, так их, ретроградов-приверженцев убогого базового подмножества великого языка С++-са. Только я бы вам посоветовал открыть новую тему для дальнейшего развития этой идеи. Да, и еще - про ассемблер ты маленько загнул. Средний современный компилятор, как принято считать, уже давно генерирует код, лучщий по качеству ручного ассемблерного. Так что если и есть вставки - это скорее дань традиции, непереписанные куски. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2005, 00:48 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
MasterZiv, вы просто либо не все прочитали, либо не понимаете суть проблемы. Если есть умные мысли, то примеры кода в студию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2005, 01:02 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
MasterZivМолодец, AndreiNz ! Так их, так их, ретроградов-приверженцев убогого базового подмножества великого языка С++-са. Посмотрите пожалуйста топик - пока большинство утверждений про ООП от AndreiNz было некорректно, а приводимые примеры кода просто удивляли :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2005, 09:16 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Интегратор, А Вам не приходило в голову, что ваш вариант 2 как раз является попыткой воплотить в С то, что я предложил в самом начале. Вот, поздравляю, проблему полиморфизма вы худо - бедно решили. Теперь осталось реализовать инкапсуляцию. Главное, не останавливайтесь на достигнутом! Тоесть, когда я говорю что-то, это вас удивляет, а когда вы говорите тоже самое но другими словами, вас это не удивляет? Кодер, то что Вы предложили в примере, наверное самый чистый вариант решения данной проблемы в С. Только у него есть один существенный недостаток - он использует макросы. А макросы ужасно неприятны в отладке и к тому же они очень толерантны к глупым ошибкам. Как только Ваши макросы станут посложнее, вы почувствуете эту проблему. Кроме этого макросы не решат проблемы с ассоциированными данными. Так при создании Thread в Windows возвращается HANDLE. Он используется в последующих операциях с этой самой Thread. Что-то подобное должно быть и в UNIXе. Класс обеъдинит вместе данные и операции над ними. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2005, 14:38 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
AndreiNzИнтегратор, А Вам не приходило в голову, что ваш вариант 2 как раз является попыткой воплотить в С то, что я предложил в самом начале. Второй вариант использует косвенный вызов процедур что не есть хорошо - тоже самое как и не очень хорошо злоупотреблять виртуальными функциями, что вы настойчиво навязываете. А макросы ужасно неприятны в отладке и к тому же они очень толерантны к глупым ошибкам. Как только Ваши макросы станут посложнее, вы почувствуете эту проблему. Если вы обратили внимаение то так реализована компиляция в уникоде/без уникода в Сях например - и ничего - проблем пока не встречал. Такое использование макросов вполне нормально. Кроме этого макросы не решат проблемы с ассоциированными данными. HANDLE - то же запрятанное что-то что кстати тоже разное в зависимоти от версии винды :). К чему я это - ук тому что передавайте void* как внутреннее состояние в функции. Короче поставленную автором топика задачу можно и нужно решить хоть на голом С и ООП здесь совершенно не причём - нарвится пользуйся - не нравится - не пользуйся. Проблемы буду в любом случае и где их будет больше - вопрос совершенно не однозначный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2005, 14:57 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
AndreiNz, Если вас макросы смущают, то темплейты должны быть вообще смертельны Кстати, что там у нас с уровнем абстракции при инкапсуляции? Я жду, где про это дело можно почитать в интернете и книжках. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2005, 15:02 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
КодерAndreiNz, Если вас макросы смущают, то темплейты должны быть вообще смертельны Кстати, что там у нас с уровнем абстракции при инкапсуляции? Я жду, где про это дело можно почитать в интернете и книжках. Если AndreiNz хочет пытаться быть последовательным, (хотя после заявлений о паттернах, на вопросы о которых он кстати отказался отвечать, всё может быть :) ) он должен тащится от шаблонов в реализации С# - компилируемые, типобезопасные... и поэтому совершенно убогие и непригодные для метапрограммирования :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2005, 15:23 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
ЗемлекопMasterZiv, вы просто либо не все прочитали, либо не понимаете суть проблемы. Если есть умные мысли, то примеры кода в студию. У меня мысли есть, и причем, прошу заметить, все мысли гениальные и божественные. Я прочитал следующее : автор Во всем мире получается без всяких интерфейсов и абстрактных классов на обычном С , более мне читать не нужно - я и так понял суть проблемы. Так вот, по этому поводу есть две мысли : 0) С++ рулез, С - отстой. 1) В нашем 21 веке, когда есть возможность писать на С++, писать на С просто нелепо и смешно. Именно поэтому я и поддержал AndreiNz, потому что он прав. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2005, 19:09 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
MasterZiv У меня мысли есть, и причем, прошу заметить, все мысли гениальные и божественные. Не думаю, что под влиянием алкоголя или травки у вас могут быть такие мысли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2005, 19:31 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
[quot MasterZiv 0) С++ рулез, С - отстой. Именно поэтому я и поддержал AndreiNz, потому что он прав.[/quot] Во первых я не вижу аргументации, а во вторых переносимы на программы на С++ надругие компиляторы ? Не хотелось бы вас расстраивать - но переносимы с большой натяжкой. Я уж молчу о проблемах с бинарниками на С++ - например при желании поместить объект в dll ... И не приводите в качестве примера COM - полноценных бинарных компонент, реализующий возможности С++ вы не сделаете. 1) В нашем 21 веке, когда есть возможность писать на С++, писать на С просто нелепо и смешно. В нашем 21 веке когда есть managed код писать на unmanaged C++ просто нелепо и смешно . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2005, 10:33 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Сначала отвечу Крдеру. Проблемы с макросами обусловленны прежде всего тем, что макросы обрабатывает препроцессор. А темплэйты обрабатываются компилятором. Их иногда еще называют макросами, одобренными компилятором. В связи с этим отладка темплейтов удобнее отладки макросов. Да, спасибо, что напомнили. Исправляю ошибку. Полиморфизм обеспечивает более высокий уровень абстракции нежели инкапсуляция. Copyright (c) AndreiNz 2005. All rights reserved. При перепечатке ссылка на данный пост обязательна. Теперь Интегратору. Вроде бы я пытался отвечать на все ваши вопросы, даже не самые скромные. Видиимо где-то упустил. Не сочтите за труд, повторите, что вы спрашивали у меня про Design patterns а я такой - сякой не ответил. Просто лень перелопачивать весь топик. Теперь про HANDLE, по вашему посту видно, что вы не совсем понимаете, что это такое. Так вот, когда вы просите Windows создать какой-либо объект (не путать с ООП). Он, если может, делает это и возвращает вам уникальный идентификатор, который вы можете использовать для дальнейших операций с этим объектом. В Win32 это всегда будет 32 константа, а в Win16 (Windows 3.1, WFWG и тд), возможно и 16-ти, но этим я не занимался. Так, если вам, что-либо интересно, вы спрашивайте, я вам многое могу рассказать. Ну например что такое ISR и DPC и зачем они нужны. Или для чего в COM создаются proxy и stab-ы. Кстати, я тоже хотел бы узнать, чем занимается ваша фирма, только я не буду утверждать, что у нее негодная продукция. Мне воспитание не позволят делать подобные заявленя, без 100% уверенности в правоте подобного заявления. Кстати, сколько вы сами разработали подобных серверов, может у вас есть огромный опыт, а я всего лишь любитель (на фоне вас), который сделал всего два и третий серьезно переделал. Работают ли ваши сервера, где-либо? Спасибо за ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2005, 03:36 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
AndreiNzСначала отвечу Крдеру. Проблемы с макросами обусловленны прежде всего тем, что макросы обрабатывает препроцессор. А темплэйты обрабатываются компилятором. Их иногда еще называют макросами, одобренными компилятором. В связи с этим отладка темплейтов удобнее отладки макросов. Да, спасибо, что напомнили. Исправляю ошибку. Полиморфизм обеспечивает более высокий уровень абстракции нежели инкапсуляция. Copyright (c) AndreiNz 2005. All rights reserved. При перепечатке ссылка на данный пост обязательна. Оба объяснения похожи на старый анекдот: - В Петербурге жить лучше, чем в Москве. - Чем лучше то? - Чем в Москве. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2005, 08:07 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
AndreiNz Теперь Интегратору. Вроде бы я пытался отвечать на все ваши вопросы, даже не самые скромные. Видиимо где-то упустил. Не сочтите за труд, повторите, что вы спрашивали у меня про Design patterns а я такой - сякой не ответил. Просто лень перелопачивать весь топик. Вы утверждали о каких-то накладных расходах, связанных с DP. Для меня это равносильно утверждению что ООП приводит к накладным расходам. С со вторым вы миритесь, а с первым - нет :) Как это понимать ? Теперь про HANDLE, по вашему посту видно, что вы не совсем понимаете, что это такое. HANDLE может быть что угодно - это концепция не Windows, а общий подход инкапсуляции внетренний структуры объекта. Это может быть как просто целое число, являющееся например индексом в некотором массиве указатель на объекты, как и например непосредственно адресом, по которому расположен объект. Соответсвенно handle позволяет программировать на процедурных языках в ООП стиле - вот и всё. Так вот, когда вы просите Windows создать какой-либо объект (не путать с ООП). Он, если может, делает это и возвращает вам уникальный идентификатор, который вы можете использовать для дальнейших операций с этим объектом. А вот тут кстати с удовольствие попутаю с ООП . Виндоус - объектно0ориентированная система и объекты виндоус вполне можно рассматривать как объекты. Для меня эти два примера кода являются равноценными - да и компилятор сгенерит похожий код - в первом случае он сам передаст состояние объекта, а во вторым - это делаете вы сами Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. 6. 7. В Win32 это всегда будет 32 константа, а в Win16 (Windows 3.1, WFWG и тд), возможно и 16-ти, но этим я не занимался. Так, если вам, что-либо интересно, вы спрашивайте, я вам многое могу рассказать. Ну например что такое ISR и DPC и зачем они нужны. Или для чего в COM создаются proxy и stab-ы. Кстати, я тоже хотел бы узнать, чем занимается ваша фирма, только я не буду утверждать, что у нее негодная продукция. Системы автоматизации финансовых расчётов. Кстати, сколько вы сами разработали подобных серверов, может у вас есть огромный опыт, а я всего лишь любитель (на фоне вас), который сделал всего два и третий серьезно переделал. Работают ли ваши сервера, где-либо? Спасибо за ответ. Я не считаю их по количеству - надо смотреть что имеено и как вы сделали, можно и 100 сделать. Я сделал 3. Два на скорую руку, второй уже кстати 1.5 лет работает, перезагружался два раза при профилактических работах на сервере. Третий серьёзно переработал и продолжаю перерабатывать. Думаю работы на нём ещё на полгода как минимум хватит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2005, 10:09 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
AndreiNzТеперь про HANDLE, по вашему посту видно, что вы не совсем понимаете, что это такое. Так вот, когда вы просите Windows создать какой-либо объект (не путать с ООП). Он, если может, делает это и возвращает вам уникальный идентификатор, который вы можете использовать для дальнейших операций с этим объектом. В Win32 это всегда будет 32 константа, а в Win16 (Windows 3.1, WFWG и тд), возможно и 16-ти, но этим я не занимался. HANDLE - это void * . См. winnt.h. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2005, 11:14 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Землекоп HANDLE - это void * . См. winnt.h. Ещё более интересные вещи можно нарыть если покопаться в исходниках например той же 2000-ной винды :) Но на самом деле это не принципиально, главное что handle - это что-то что ассоциируется с некоторой структурой данных о которыой вы ничего не знаете. Ну скажем так: НЕ ДОЛЖНЫ ничего знать ;). Так как если эту структуру передавать не как void* то вы легально сможете менять её как угодно не следуя рекомендациям. Например см. CRITICAL_SECTION ... А вообще это уже оффтоп и я вообще имел в виду не реализацию в винде а пытался донести до AndreiNz что Сишные методики, о которых шла речь прекрасно работают и активно используются во множестве рабочих комерческих проектов..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2005, 17:15 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Интегратор prof79А библиотекам как разруливать внутри себя? Вариант номер 1 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Вариант 2 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Смеялся, Создаем себе проблемы и героически их преодалеваем Интегратор Для меня эти два примера кода являются равноценными - да и компилятор сгенерит похожий код - в первом случае он сам передаст состояние объекта, а во вторым - это делаете вы сами Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. 6. 7. В Win32 это всегда будет 32 константа, а в Win16 (Windows 3.1, WFWG и тд), возможно и 16-ти, но этим я не занимался. Так, если вам, что-либо интересно, вы спрашивайте, я вам многое могу рассказать. Ну например что такое ISR и DPC и зачем они нужны. Или для чего в COM создаются proxy и stab-ы. Смеялся еще сильнене, вставьте между run(obj, 123); и dealloc(obj); пару сотен строк кода, и пока я буду смеяться дальше, а вы будете заниматься отладкой(поиском утечки памяти и т.д. и т.п.) А как насчет глупых ошибок, типа обращения по неверному типу указателя. Согласитесь человеческий фактор существует всегда. Я еще смеюсь , а вы продолжайте заниматься отладкой. Ну насмешили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2005, 20:22 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
ТО Интегратор Ваш стиль ведения проекта напоминает старую поговорку Два солдата из стройбата заменяют экскаватор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2005, 20:29 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
onstat, умников тут и без вас хватает. Ваш код в студию, если хотите, что-либо обсуждать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2005, 21:22 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
AndreiNz1 Разберитесь с socket API socket(), listen(), accept(), connect() и тд. 2. Напишите два класса ListeningSocket & ConnectedSocket, можно унаследывать их от одного базового MySocket. Или ищите все это на Интернете. Если не хотите зависимосто ит платформы, то Вам нельзя пользоваться всякими WSSoket-ами. Но полная независимость у Вас врядли получится. Поэтому можете использовать интерфейсы interface или абстрактные классы, что в прицыте почти одно и тоже. 3. Создавть отдельный процесс на каждое соединение довольно накладно. Стандартное решение - использовать Thread или как их еще называит потоки. Разберитесь с этим вопросом очень хорошо. 4. Не помешает хорошое знание объектно-ориентированного программирования в C++. Мое изначальное намерине отнюдь не было - ввяызываться в спор о ООП. Однако, из собственного опыта я знаю, что ООП существенно упрощает разработку любых приложений. Прежде всего за счет того, что вы создаете собственные абстракции, с которыми вы сами потом и работаете. Да, нужно владеть этим предметом на достаточно высоком уровне, но это справедливо для любой технологии и любого языка. Использование же интерфейсов позволяет вам задать контракт или спесификацию, которой должны удовлетворять те, кто хочет ими пользоваться. Наилучший, на мой взгляд, пример интерфейса - это электрические вилка с розеткой. В одну и туже розетку вы можете воткнуть и пылесос и дрель и телевизор. Совершенно разные приборы. Но пока они имеют соответствующий интерфейс - они будут работать. И если через 20 лет появится что-либо, о чем мы сейчас и предположить не можем, то это что-либо тоже может быть подключено к старой надежной розетке. Само использование этого подхода позволяет вам получить достаточно независимые слои, которые относительно просто соединять как друг с другом так и с новыми элементами. Я тоже когда-то прошел через отрицание ООП, пока сам не попыталя его мспользовать. Что-то получилось, но полную силу ООП можно почувствовать, когда используешь все возможности данного подхода. А разве это не справедливо для любой технологии? Да я погорячился, когда сказал, сто Design patterns могут завести куда угодно. Признаю, правильнее было бы сказать, что сдуру можно и шею сломать. Что уже было сказанно мной. Землекоп, Попробуйте поиграть с ООП. Начните не с сокетов и Thread-ов, а с бизнес логики. Когда почувствуете вкус и саму идею, тогда можете переходить к сокетам и тд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2005, 00:02 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
AndreiNzПопробуйте поиграть с ООП. Начните не с сокетов и Thread-ов, а с бизнес логики. Когда почувствуете вкус и саму идею, тогда можете переходить к сокетам и тд. Яйца курицу учат ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2005, 00:59 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
поскипано.. AndreiNz Я тоже когда-то прошел через отрицание ООП, пока сам не попыталя его мспользовать. Так кто же отрицал ООП ??!! Мне кажется что концепции ООП никто в этой ветке особо не оспаривал, спорили с Вашими утверждениями и некорректными и высказываниями... Автор спросил как решить поставленную задачу - ему сказали как, а Вы в ответ на это стали утверждать что тут без ООП никуда... Вот Крамер великолепно обходиться умудрялся (до сих пор его книгу полистываю ;) ). Более современные авторы с ООП пишут совершенно непотребную литературу, а Вы говорите ООП изучайте... Надо концепции общие изучать и подходы, а не зацикливаться на конкретной технологии. Средство не должно быть замоцелью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2005, 01:39 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Землекоп, Так для справки, я профессионально, те за деньги разрабатываю парограммы так, чтобы не соврать 22-23 годика как. Так, что кто яйца, а кто курица, это еще надо посмотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2005, 03:28 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Интеграторпоскипано.. Автор спросил как решить поставленную задачу - ему сказали как, а Вы в ответ на это стали утверждать что тут без ООП никуда ... Тоесть по вашему фраза AndreiNz. Не помешает хорошое знание объектно-ориентированного программирования в C++. означает, что без ООП никуда. Знаете, мне простительно недопонимание русского языка, так как я на живу в России уже около 9 лет, но вам, вы уж извините... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2005, 03:35 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
AndreiNzЗемлекоп, Так для справки, я профессионально, те за деньги разрабатываю парограммы так, чтобы не соврать 22-23 годика как. Так, что кто яйца, а кто курица, это еще надо посмотреть. Сколько же вам лет, дедушка? При таком аттитьюде, я бы больше 23 и не дал бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2005, 11:01 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
AndreiNz Тоесть по вашему фраза AndreiNz. Не помешает хорошое знание объектно-ориентированного программирования в C++. означает, что без ООП никуда. Знаете, мне простительно недопонимание русского языка, так как я на живу в России уже около 9 лет, но вам, вы уж извините... Вы очень серьёзно преувеличили важность ООП для поставленно автором топика задачи. ООП к этой задаче вообще не имеет никакого отношения. Это равносильно утверждению - для этой задачи желательно ещё знание С# ... и т.п. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2005, 13:35 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
ИнтеграторВы очень серьёзно преувеличили важность ООП для поставленно автором топика задачи. ООП к этой задаче вообще не имеет никакого отношения. Это равносильно утверждению - для этой задачи желательно ещё знание С# ... и т.п. :) Открою военную тайну. Самое смешное, что такие задачи чаще всего решают люди, которые не особенно вникают в сокеты, ОПП и тд и тп. Им хватает php, perl и тд и тп. Совсем отсталые довольствуются просто html-файлами. WWW - сервер разбирается сам с этими проблемами. Он для этого и был придуман. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2005, 14:16 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Землекопonstat, умников тут и без вас хватает. Ваш код в студию, если хотите, что-либо обсуждать. Ну коль вы так хотите пожалуйста, пример API сетевого мультиплексора (часть моего уже готового проекта). С удовольствием выслушаю конструктивную критику. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. Теперь ваша очередь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 14:53 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Землекоп Открою военную тайну. Самое смешное, что такие задачи чаще всего решают люди, которые не особенно вникают в сокеты, ОПП и тд и тп. Им хватает php, perl и тд и тп. Совсем отсталые довольствуются просто html-файлами. WWW - сервер разбирается сам с этими проблемами. Он для этого и был придуман. Посмотрите на название раздела, он называется C++, значит подразумемает обсуждение ООП проекта. Вобщем не нужно съезжать с темы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 15:02 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
onstat-С удовольствием выслушаю конструктивную критику. Теперь ваша очередь. Для конструктивной критику нужно в вашу проблематику вникуть. А так на первый взягляд мне нотация используемая не очень нравится :) Я например привык к длинным названиям побробным с использованием прописных букв в начале каждлого слова. Но в принципе это дело вкуса ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 15:06 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
onstat-С удовольствием выслушаю конструктивную критику. А что можно критиковать, если этот кусок вне контекста не имеет смысла. Что есть c_nettimer нам неясно. Где работа с витками не видно. А главное для чего это было сделано, не написали. Еще один выпендреж? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 15:34 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
onstat- Землекоп Открою военную тайну. Самое смешное, что такие задачи чаще всего решают люди, которые не особенно вникают в сокеты, ОПП и тд и тп. Им хватает php, perl и тд и тп. Совсем отсталые довольствуются просто html-файлами. WWW - сервер разбирается сам с этими проблемами. Он для этого и был придуман. Посмотрите на название раздела, он называется C++, значит подразумемает обсуждение ООП проекта. Вобщем не нужно съезжать с темы. Вопрос был про общепринятые способы решения аналогичных проблем (только для мультиплатформенного кода с BSDSockets/WinSocks, без компонентов и иже с ними). Я пример нынешнего состояния дел в этой области. Кстати, в вашем коде есть строчка: Код: plaintext А почему вы не воспользовались Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 15:48 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Землекоп 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 16:09 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Землекоп onstat- Землекоп Открою военную тайну. Самое смешное, что такие задачи чаще всего решают люди, которые не особенно вникают в сокеты, ОПП и тд и тп. Им хватает php, perl и тд и тп. Совсем отсталые довольствуются просто html-файлами. WWW - сервер разбирается сам с этими проблемами. Он для этого и был придуман. Посмотрите на название раздела, он называется C++, значит подразумемает обсуждение ООП проекта. Вобщем не нужно съезжать с темы. Вопрос был про общепринятые способы решения аналогичных проблем (только для мультиплатформенного кода с BSDSockets/WinSocks, без компонентов и иже с ними). Я пример нынешнего состояния дел в этой области. Кстати, в вашем коде есть строчка: Код: plaintext А почему вы не воспользовались Код: plaintext Я просил конструктивно. А что есть принципиальная разница? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 16:16 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
onstat- Обьясните мне,что вы подразумеваете по термином виток? Это наверное спец термин в вашей организации. Согласен, что локальный сленг. Один из вариантов перевода Thread onstat- с_netconnpool пул сетевых соединений с поддержкой мультиплексирования и асинхронного ввода вывода. *.cpp глянуть можно? onstat- Да кстате этот работает пока только под unix. Если нужно будет под M$ для прикладного програмиста интерфейс не поменяется. Интересно будет посмотреть, что вы будете менять, тк тут как раз спорят в каком месте хранить изменяемые части и как их реализовывать. onstat- Полный код вы скоро сможете найти в проекте OpenDSA, когда он выйдет. Концептуальное обсуждение проекта пока здесь http://www.sql.ru/forum/actualthread.aspx?tid=185115 Вы только ошибки в каментах поправьте. Многовато. Гляну на весь код, когда появится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 16:26 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
onstat-Я просил конструктивно. А что есть принципиальная разница? Так вот из-за подобной разницы тут весь сыр-бор и произошел. А нужно ли заворачивать в классы sockets & threads API? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 16:29 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Землекоп onstat- Да кстате этот работает пока только под unix. Если нужно будет под M$ для прикладного програмиста интерфейс не поменяется. Интересно будет посмотреть, что вы будете менять, тк тут как раз спорят в каком месте хранить изменяемые части и как их реализовывать. А храниться они будут в разных файлах, и собираться подключаться по принципу как описал AndreiNz выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 16:41 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
onstat-А храниться они будут в разных файлах, и собираться подключаться по принципу как описал AndreiNz выше. Вот тогда мы посмотрим на реализацию и подвергнем резкой критике, если создадите что-нибудь типа Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 16:46 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Землекоп wrote: > Так вот из-за подобной разницы тут весь сыр-бор и произошел. А нужно ли > заворачивать в классы sockets & threads API? мне вот нужно. легко, при необходимости, могу отнаследовать класс и от потокового класса и от сокетного одновременно, и иметьь работу с сокетом в отдельном потоке. Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 16:50 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
onstat А храниться они будут в разных файлах, и собираться подключаться по принципу как описал AndreiNz выше. Что под этим понимаешь ? если то как предлагал AndreiNz то за такое могут дать по ушам и правильно сделают :) А вообще читаемоскь кода имхо оставляет желать лучшего. Object* arr[MAX_PATH] - опять же надо смотреть. Если arr не отвечает за хранение Object то нормально, если же что то типа arr = new ConcreteObject(); .. delete arr; то я б тоже за это по ушам дал :) Только std::vector<shared_ptr<Object> > arr_; Вобщем надо смотреть полный код и разбираться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 16:56 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
alex_k Землекоп wrote: > Так вот из-за подобной разницы тут весь сыр-бор и произошел. А нужно ли > заворачивать в классы sockets & threads API? мне вот нужно. легко, при необходимости, могу отнаследовать класс и от потокового класса и от сокетного одновременно, и иметьь работу с сокетом в отдельном потоке. Создайте структуру, куда занесите необходимые переменные и передайте ее в thread. Далее передавайте структуру при вызове ваших специфических функций в качестве параметра. Будет также легко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 16:57 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Землекоп wrote: > alex_k > > Землекоп wrote: > > Так вот из-за подобной разницы тут весь сыр-бор и произошел. А нужно ли > > заворачивать в классы sockets & threads API? > > мне вот нужно. > легко, при необходимости, могу отнаследовать класс и от потокового > класса и от сокетного одновременно, и иметьь работу с сокетом в > отдельном потоке. > > > > Создайте структуру, куда занесите необходимые переменные и передайте ее > в thread. Далее передавайте структуру при вызове ваших специфических > функций в качестве параметра. Будет также легко. но это разная легкость :-) мне удобнее думать о любой сущности как о объекте и чтобы синтаксис языка мне в этом помогал Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 17:03 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Землекоп onstat-А храниться они будут в разных файлах, и собираться подключаться по принципу как описал AndreiNz выше. Вот тогда мы посмотрим на реализацию и подвергнем резкой критике, если создадите что-нибудь типа Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Мне не удалось увидеть конструктивной критики этого подхода. Так в чем его недостатки? О достоинствах я знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 17:06 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
alex_k но это разная легкость :-) мне удобнее думать о любой сущности как о объекте и чтобы синтаксис языка мне в этом помогал Структура, если особенно не углубляться, тот же класс, только члены у структуры по умолчанию public. Разве еще на -> сэкономите внутри класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 17:09 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
onstat-Мне не удалось увидеть конструктивной критики этого подхода. Так в чем его недостатки? О достоинствах я знаю. Так мы же вашего подхода не узрели Кусок h-файла для одного класса - не открыл нам завесы мудрых планов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 17:12 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Землекоп onstat-Мне не удалось увидеть конструктивной критики этого подхода. Так в чем его недостатки? О достоинствах я знаю. Так мы же вашего подхода не узрели Кусок h-файла для одного класса - не открыл нам завесы мудрых планов. Так я и вашего подхода в исходниках не видел до сих пор. Даже на том уровне абстракции, который предоставил я. Ваш ход . Потом будем обсуждать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 17:31 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
onstat- Землекоп onstat-Мне не удалось увидеть конструктивной критики этого подхода. Так в чем его недостатки? О достоинствах я знаю. Так мы же вашего подхода не узрели Кусок h-файла для одного класса - не открыл нам завесы мудрых планов. Так я и вашего подхода в исходниках не видел до сих пор. Даже на том уровне абстракции, который предоставил я. Ваш ход . Потом будем обсуждать. Для threads вот мой подход /topic/187358&pg=2#1604298 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 17:38 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Интегратор Во первых я не вижу аргументации, а во вторых переносимы на программы на С++ надругие компиляторы ? Не хотелось бы вас расстраивать - но переносимы с большой натяжкой. В нашем 21 веке когда есть managed код писать на unmanaged C++ просто нелепо и смешно . Oracle Database на 28 платформах. Мы у себя пишем софт одновременно на несколько платформ. А на сколько платформ переносится managed код ? unix ? Mac ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 17:41 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
LepsikOracle Database на 28 платформах. Мы у себя пишем софт одновременно на несколько платформ. По-моему, Oracle уже почти весь на Java написан. Так это и есть managed код ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 17:45 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Землекоп alex_k но это разная легкость :-) мне удобнее думать о любой сущности как о объекте и чтобы синтаксис языка мне в этом помогал Структура, если особенно не углубляться, тот же класс, только члены у структуры по умолчанию public. Разве еще на -> сэкономите внутри класса. Стоемость -> по сравнению со стоимость отладки копейки. 1. В структуре вы не сможете переопределить операции +, -, >,<, == ... 2. Переопределить конструктор копирования. 3. А с чисткой памяти за собой в вашем случае вобще полная ж... Давно одину и туже память освобождали 2 раза? Сколько искали место кто и где ее освобождает? Эти преймущества С++ очень тяжело переоценить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 17:47 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
onstat-1. В структуре вы не сможете переопределить операции +, -, >,<, == ... В данной задаче нет необходимости onstat- 2. Переопределить конструктор копирования. Важно, если есть пойнтеры среди членов. В принципе, можете написать функцию для копирования структуры. onstat- 3. А с чисткой памяти за собой в вашем случае вобще полная ж... Давно одину и туже память освобождали 2 раза? Сколько искали место кто и где ее освобождает? В C++ c этим проблем хватает. Блоки памяти, на которые не указывает ни один указатель в программе, не удаляются как в Java. onstat- Эти преймущества С++ очень тяжело переоценить. Так что же вы не используете vector вместо массива ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 17:55 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
[quot Землекоп Для threads вот мой подход /topic/187358&pg=2#1604298[/quot] Код: plaintext Не увидел ни одного объявления массивов, структур итд для хранения информации описывающей subj, Вы же не с одним сокетом работаете. Без этих обьявлений ваш код - офтопик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 17:57 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Землекоп Так что же вы не используете vector вместо массива [/quot] Землекоп В данной задаче нет необходимости Вы очень противоречивы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 18:00 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
[quot Землекоп В C++ c этим проблем хватает. Блоки памяти, на которые не указывает ни один указатель в программе, не удаляются как в Java. [/quot] Ну вы даете, почему Ваш код не Java. Не нужно съзжать в офтопик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 18:05 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
onstat-Не увидел ни одного объявления массивов, структур итд для хранения информации описывающей subj, Вы же не с одним сокетом работаете. Без этих обьявлений ваш код - офтопик. Неконструктивный наезд. Вы же не постите весь код. Это просто пример. Вся информация у меня хранится в связном списке структур (легко делается без всякого С++) и удаляется при завершении витка. При соединение создается структура параметров, которая передается в thread и заносится в linked list. Я всегда знаю сколько у меня серверных соединений и их состояние. В принципе, я не обхожусь уж совсем без c++. Для чистых приложений под Windows я использую MFC, а там есть уже готовые классы для сокетов и threads. Для сложных кросплатформенных frontend GUI клиентов частично использую Qt. Свои классы для обертывания сокетов и витков писать не имеет смысла, тк все давноо прописано. Для критических по времени приложений будет лучше С. В любом случае С++ нет встроенных в язык средств синхронизации между threads. Java более подошла бы. Если нужна скорость и простота в разработке сложной системы клиент-сервер, то web server - готовое решение, которое использует большинством разработчиков в этом мире. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 18:19 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Землекоп LepsikOracle Database на 28 платформах. Мы у себя пишем софт одновременно на несколько платформ. По-моему, Oracle уже почти весь на Java написан. Так это и есть managed код вас кто-то обманул. на java часть интерфейса и часть ESP. А сам engine как был на C++ так там и останется. Иначе производительность упадет резко. Да в самом мелкософте большинство как писалось на С++ так и будет. Это же касается IBM, SONY, Corel, Sybase, ....... У нас в компании, а мы обслуживаем около 6 млн. клиентов как писалось на С++ так никто и не думает переходить на managed code. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 18:21 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Землекоп В C++ c этим проблем хватает. Блоки памяти, на которые не указывает ни один указатель в программе, не удаляются как в Java. в С++ нет проблем, язык предоставляет инструменты, и если вы не можете(не хотите ) ими пользоваться это ваши проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 18:21 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
onstat-Вы очень противоречивы. Это вы противоречивы Вы пытаетесь навязать повальное ООП всюду, но оставляете использование примитивных сишных массивов, даже размер которых изменить нельзя. Скажете, что нет необходимости заменять массив на нечто более сложное, так и об этом же говорю в конкретном случае про sockets&threads ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 18:30 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
onstat- Землекоп В C++ c этим проблем хватает. Блоки памяти, на которые не указывает ни один указатель в программе, не удаляются как в Java. в С++ нет проблем, язык предоставляет инструменты, и если вы не можете(не хотите ) ими пользоваться это ваши проблемы. Они в общем случае не дают гарантии на 100% при сбоях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 18:35 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Землекоп onstat-Не увидел ни одного объявления массивов, структур итд для хранения информации описывающей subj, Вы же не с одним сокетом работаете. Без этих обьявлений ваш код - офтопик. Неконструктивный наезд. Вы же не постите весь код. Это просто пример. Вся информация у меня хранится в связном списке структур (легко делается без всякого С++) и удаляется при завершении витка. При соединение создается структура параметров, которая передается в thread и заносится в linked list. Я всегда знаю сколько у меня серверных соединений и их состояние. В принципе, я не обхожусь уж совсем без c++. Для чистых приложений под Windows я использую MFC, а там есть уже готовые классы для сокетов и threads. Для сложных кросплатформенных frontend GUI клиентов частично использую Qt. Свои классы для обертывания сокетов и витков писать не имеет смысла, тк все давноо прописано. Для критических по времени приложений будет лучше С. В любом случае С++ нет встроенных в язык средств синхронизации между threads. Java более подошла бы. Если нужна скорость и простота в разработке сложной системы клиент-сервер, то web server - готовое решение, которое использует большинством разработчиков в этом мире. Смеялся, особенно с фразы Землекоп В любом случае С++ нет встроенных в язык средств синхронизации между threads Еще больше смеялся с доказательства более высокого быстродействия программы на С чем С++ с использованием библиотек С++. Конструктива у нас с вами точно не получится, не вижу смысла зря сотрясать воздух. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 18:37 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
onstat-Конструктива у нас с вами точно не получится, не вижу смысла зря сотрясать воздух. Вы используете известный прием форумного общения, когда больше нечего сказать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 18:44 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Землекоп onstat-Конструктива у нас с вами точно не получится, не вижу смысла зря сотрясать воздух. Вы используете известный прием форумного общения, когда больше нечего сказать. Мне действительно нечего сказать. Потому что ваши опусы о о более высокой происводительности программы на С с использованием библиотек С++, не дают мне возможности вообще что либо сказать, я до сих пор смеюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 18:51 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
onstat- Землекоп onstat-Конструктива у нас с вами точно не получится, не вижу смысла зря сотрясать воздух. Вы используете известный прием форумного общения, когда больше нечего сказать. Мне действительно нечего сказать. Потому что ваши опусы о о более высокой происводительности программы на С с использованием библиотек С++, не дают мне возможности вообще что либо сказать, я до сих пор смеюсь. А что вы можете добавить кроме смеха в подтверждение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 18:56 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Землекоп А что вы можете добавить кроме смеха в подтверждение? Подтверждения чего? Того что вы не знаете что пишете(не компетентны) , или того, что вы противоречивы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 19:01 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
onstat- Землекоп А что вы можете добавить кроме смеха в подтверждение? Подтверждения чего? Того что вы не знаете что пишете(не компетентны) , или того, что вы противоречивы? Давайте еще повторите, что у вас вызывает смех и ниже ваши аргументы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 19:04 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
http://]http://lib.ru/SOCFANT/CHAPEK/gazeta.txt ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 19:10 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 19:11 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Землекоп http://lib.ru/SOCFANT/CHAPEK/gazeta.txt Спасибо толковая статья. На протяжении всей беседы вы и ваши колеги актвно использовали следующие приемы 5,6,7 против ООП концепции, заметьте вы находитесь в форуме по С++. 8,9 В коментариях к вашим исходникам, и переезд на Java, Когда вас в уличили. 9. Приведения в пример Фамилий и трудов С-гуру, не раскрывая истинной сути происходящего. 10. Ваш пример с кодом на С на базе библиотек С++. А также коментарий к вашим исходникам. 11. Касательно любого поста оппонента. 12. Не на того напали. Теперь по теме, абстагируясь от полемики, а сказать то нечего. потому как искренность ваших намерения я пока не раскусил. з.ы. Добавьте в статью пункт "провокация путем уступки инициативы в полемике" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 19:55 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
onstat- 10. Ваш пример с кодом на С на базе библиотек С++. А также коментарий к вашим исходникам. А что это за пример такой с кодом на С на базе библиотек С++. Где можно посмотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 20:07 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Землекоп А что это за пример такой с кодом на С на базе библиотек С++. Где можно посмотреть. Землекоп В принципе, я не обхожусь уж совсем без c++. Для чистых приложений под Windows я использую MFC, а там есть уже готовые классы для сокетов и threads. Для сложных кросплатформенных frontend GUI клиентов частично использую Qt. Свои классы для обертывания сокетов и витков писать не имеет смысла, тк все давноо прописано. Для критических по времени приложений будет лучше С. Примера небыло, были общие фразы Прокоментируйте пожалуйста это подробнее . В зависимости от коментария я вам скажу 1. В ничего не понимаете в теме разговора. 2. Противоречивы. 3. Вы не последовательны в изложении мыслей. Других вариантов просто нет. Можете самокритично после коментария добавить свои варианты ответа(ов). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 20:25 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Или это. п 10 читается между строк. Землекоп[quot onstat-]Не увидел ни одного объявления массивов, структур итд для хранения информации описывающей subj, Вы же не с одним сокетом работаете. Без этих обьявлений ваш код - офтопик. Неконструктивный наезд. Вы же не постите весь код. Это просто пример. Вся информация у меня хранится в связном списке структур (легко делается без всякого С++) и удаляется при завершении витка. При соединение создается структура параметров, которая передается в thread и заносится в linked list. Я всегда знаю сколько у меня серверных соединений и их состояние. В принципе, я не обхожусь уж совсем без c++. Для чистых приложений под Windows я использую MFC, а там есть уже готовые классы для сокетов и threads. Для сложных кросплатформенных frontend GUI клиентов частично использую Qt. Свои классы для обертывания сокетов и витков писать не имеет смысла, тк все давноо прописано. Для критических по времени приложений будет лучше С. В любом случае С++ нет встроенных в язык средств синхронизации между threads. Java более подошла бы. Если нужна скорость и простота в разработке сложной системы клиент-сервер, то web server - готовое решение, которое использует большинством разработчиков в этом мире.[/qute] что скажете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 20:37 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
onstat- что скажете? О чем? onstat-10. Ваш пример с кодом на С на базе библиотек С++. А также коментарий к вашим исходникам Где пример? onstat- Примера небыло, были общие фразы О чем тогда спор? Я дал пример реального кода для нитей, который работает на Win32 и POSIX. Полную реализацию я сюда постить не буду. Вы вообще не показали, как используете ни сокетный, ни thread API. Кусок некого абстрактного класса с комментариями на английском с кучей ошибок, который имеет большее отношение к некой предметной части, чем к сокетам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 23:21 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Землекоп и onstat - может вы ещё подеретёсь ? Нафлудили на полторы страницы за день :) Давайте почаще приводить примеры кода и аргументы, а то через каждый пост - ты дурак - нет ты дурак - я не дурак - а вот ты - дурак ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 23:42 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
ИнтеграторЗемлекоп и onstat - может вы ещё подеретёсь ? Нафлудили на полторы страницы за день :) Давайте почаще приводить примеры кода и аргументы, а то через каждый пост - ты дурак - нет ты дурак - я не дурак - а вот ты - дурак Я onstat не обижал, кстати, и личность его не трогал :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 23:52 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Так Дятишки, Быстренько книжки перед сном читать. 1. Programming Microsoft Visual ++ Fifth Edition. David. J Kruglinski, George Shepherd and Scot Wingo. Microsoft Press. ISBN 1-57231-857-0. Chapter Thirty-four. Почему не стоит пользоваться Микрософтовскими сокетами. 2. Developerr's Workshop to COM and ATL 3.0. Andrew W. Troelsen. Wordware Publishing ISBN 1-55622-704-3(pb). Пусть название вас не вводит в заблуждение. Первые 70 страниц - это ревью различных подходов к программированию на С++. Да и сновная тема в книжке раскрыта достаточно хорошо. Я еще не видал более хорошего источника информации по ATL. Правда книжка достаточно редкая. Заодно поймете, насколько вы отстали от жизни. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2005, 12:42 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
Дедушка, а своими словами пересказать слабо? а то работы много, что бы еще читать подрывную литературу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2005, 13:12 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
авторУ нас в компании, а мы обслуживаем около 6 млн. клиентов как писалось на С++ так никто и не думает переходить на managed code. поинтересовался про managed code http://hghltd.yandex.com/yandbtm?url=http://proxx.com.ru/dir2/p43.htm&text=managed+code&reqtext=%28managed::67551+%26+code::11135%29//6&dsn=425&d=4185503 ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2005, 13:38 |
|
||
|
Программирование работы сервера с множеством клиентов
|
|||
|---|---|---|---|
|
#18+
AndreiNzТак Дятишки, Быстренько книжки перед сном читать. 1. Programming Microsoft Visual ++ Fifth Edition. David. J Kruglinski, George Shepherd and Scot Wingo. Microsoft Press. ISBN 1-57231-857-0. Chapter Thirty-four. Почему не стоит пользоваться Микрософтовскими сокетами. 2. Developerr's Workshop to COM and ATL 3.0. Andrew W. Troelsen. Wordware Publishing ISBN 1-55622-704-3(pb). Пусть название вас не вводит в заблуждение. В электронном виде есть ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2005, 13:48 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2033122]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
64ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
134ms |
get tp. blocked users: |
2ms |
| others: | 239ms |
| total: | 488ms |

| 0 / 0 |
