|
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 118
|
|
Грамотная реализация клиент-серверного приложения10.05.2009, 21:40. Показов 23261. Ответов 31
Метки нет (Все метки)
Возник вопрос как грамотно реализовать клиент-серверное приложение под Linux'ом. Пока имеется стандартная реализация через потоковые сокеты. Но при некорректном завершении работы клиента сервер подвисает и умирает для внешних запросов. Здесь смысл почему так происходит понятен. Необходимо реализовать грамотную реализацию для устранения этой проблеммы. Слышал про не блокирующие сокеты. Но в эту сторону не хочу копать. Хочется реализовать с помощью процессов либо потоков. Вроде как с помощью функции fork можно делать при каждом запросе копию процесса и работать с каждым запросом в индивидуальном процессе. Либо можно реализовать с помощью потоков. Слышал, что понятие потоков и процессов в linux'е отличается от винды. Вот хочу дельный совет куда начать копать, чтобы не ошибиться маршрутом. Хочется реализовать грамотно и не сложно)). Заранее спасибо.
0
|
|
| 10.05.2009, 21:40 | |
|
Ответы с готовыми решениями:
31
Прокомментировать код клиент-серверного приложения Реализация клиент-серверного соединения Реализация клиент-серверного взаимодействия на C# |
|
683 / 232 / 16
Регистрация: 15.10.2007
Сообщений: 1,246
|
|
| 10.05.2009, 22:01 | |
|
можно форкаться при новом подключении
1
|
|
|
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 118
|
|
| 10.05.2009, 22:05 [ТС] | |
|
Меня тока смущает куча дочерних процессов. Если к серверу будет конектиться 10000 пользователей.
0
|
|
|
683 / 232 / 16
Регистрация: 15.10.2007
Сообщений: 1,246
|
|
| 10.05.2009, 22:14 | |
|
Ну а как ты предлагаешь?
1
|
|
|
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 118
|
|
| 10.05.2009, 22:16 [ТС] | |
|
Да черт знает))
Добавлено через 48 секунд Я просто думаю может есть предпочтения как лучше. Или для одних задач одно для других другое...
0
|
|
|
683 / 232 / 16
Регистрация: 15.10.2007
Сообщений: 1,246
|
|
| 10.05.2009, 22:26 | |
|
можешь почитать книгу про сетевое программирование в линукс,можешь взять на самоучке
1
|
|
|
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 118
|
|
| 10.05.2009, 22:58 [ТС] | |
|
Блин в этом и смысл
Читать всю книгу сразу?? Или прочитать одну главу. Я хочу чтобы мне подсказали люди, которые писали программы такого типа и сталкивались с подобными вопросами. А блин сказать скачай книгу и почитай я тоже могу. Написал же укажите в какую сторону копать, а не укажите какую книгу скачать.
0
|
|
|
683 / 232 / 16
Регистрация: 15.10.2007
Сообщений: 1,246
|
|
| 10.05.2009, 23:43 | |
|
Ну вот я те и говорю форкайся и все буит ок!
а на счет книги,она именно про никсы,описывается много приемов.
1
|
|
|
|
|
| 11.05.2009, 12:05 | |
|
А в чём проблема на каждое соединение заводить отдельный сокет и опрашивать их все в цикле? При этом работу лучше всего вести через select (т.к. у него есть таймаут)
Добавлено через 42 секунды Кстати, вкратце расскажи, что у тебя там делается, потому как в зависимости от поставленной задачи можно делать по разному Добавлено через 6 минут 43 секунды Возьми пример. Писал лет 100 назад Делалось для следующих целей. В те времена irc-клиенты не умели работать через прокси сервер. На машине запускалась эта прога. irc-клиент подключался к этой проге. Внутри проги делалось соединение с irc-сервером через прокси (хотя в теории любое TCP соединение). Прога умеет конектиться только к одному серверу (ибо чтобы конектиться к произвольному, надо чтобы от клиента пришла информация куда, но клиент думает, что он работает напрямую без проксей). Прога могла обслуживать несколько соединений. Подозреваю, что именно это тебе и нужно. ИНтересующий тебя код в процедуре bnc_Process
1
|
|
|
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 118
|
|
| 11.05.2009, 13:39 [ТС] | |
|
На самом деле клиент связывается с сервером, где в свою очередь передает данные библиотеки для работы с БД(Oracle). В принципе я понимаю, что в данном случае это не является критичным(число дочерних процессов). Это я в теории заговорил о тысячах дочерних процессах. Хочу просто грамотно, несложно и красиво все организовать. Пример кстати не помешает))
Добавлено через 5 минут 31 секунду Осмыслил что хочу)) Структурную схему хочу. Какую-нибудь маленькую диаграмку, которая отражает основные этапы реализации. Может быть в книге какой-нибудь есть диаграмки?? Добавлено через 14 минут 6 секунд Блин пример клевый, только виндовские функции работы с сокетами немного смущают)).
0
|
|
|
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 118
|
||||||
| 11.05.2009, 21:16 [ТС] | ||||||
|
Короче всем спасибо. Нашел в инете очень крутой пример, прям под мой вопрос)). Очень просто и красиво)) Собственно вот нужный мне кусок(там еще есть описание):
Только не знаю нормально это или тоже какие-то недочеты есть в этом примере.
0
|
||||||
|
0 / 0 / 0
Регистрация: 14.01.2010
Сообщений: 7
|
|
| 15.01.2010, 12:56 | |
|
toxxin, а не мог бы ты выложить полностью весь исходник (желательно свой и который скачал)
0
|
|
|
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
|
|
| 14.03.2010, 17:45 | |
|
У меня такой вопрос - а обязательно ли использовать fork()? Я где-то видел статистику сравнения fork и thread,и там вроде потоки создавать намного менее ресурсоёмкое и более быстрое решение. Или в данном случае без fork не обойтись?
Автору - эта ссылка взята с сайта nginx - как раз про 10000 подключений http://www.kegel.com/c10k.html
0
|
|
|
|
|
| 14.03.2010, 18:01 | |
|
С fork'ом получается самая простая реализация: получил клиентское соединение, fork'нулся в отдельный процесс и больше ничего тебя не заботит. Если делать поток, то надо постоянно следить за тем, чтобы не наплодить глобальных переменных (потому как они общие на все потоки). Можно вообще не создавать ни потоков, ни процессов и чтобы всё это жило в одном процессе (как в примере из поста 10). Всё зависит от того, какие ставятся цели и как технически будет выглядеть программа-сервер. Для маленького количества соединений проще всего жить с fork'ом и не париться. Если будет много соединений, но отработка каждого соединения будет быстрая (в моём случае просто делалась сквозная передача данных), то наверное лучше делать всё в одном процессе. Если будет много трудоёмких соединений, то разбивать на потоки, чтобы тормоза одного соединения не сказывались на остальных
2
|
|
|
4 / 4 / 3
Регистрация: 01.07.2009
Сообщений: 127
|
|||
| 14.03.2010, 21:06 | |||
|
не вариант для каждого клиента делать fork() + проблема обмениватся данными между процесами - вобщем это не есть хорошо fork не для этих целей .
Автору в помощь #include <pthread.h> там есть все что тебе нужно .
0
|
|||
|
|
||||
| 14.03.2010, 22:03 | ||||
|
1
|
||||
|
60 / 22 / 2
Регистрация: 13.03.2010
Сообщений: 65
|
|
| 15.03.2010, 18:59 | |
|
Может быть помогут pthread?
0
|
|
| 15.03.2010, 18:59 | |
|
Помогаю со студенческими работами здесь
20
Реализация клиент-серверного взаимодействия Реализация клиент-серверного приложение Архитектура клиент-серверного приложения Создание клиент-серверного приложения Создание клиент серверного приложения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|