Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Обслуживание нескольких клиентов в разных потоках
|
|||
|---|---|---|---|
|
#18+
Не могу понять, как организовать обслуживание нескольких клиентов. Есть ICQ программа (один номер аськи), с которой несколько клиентов (удаленных - из инета) общаются (присылают файлы, запросы, обратно получают файлы). Как организовать обработку клиентских запросов - чтоб для каждого клиента создавался отдельный поток, который бы получал текстовые строки от ICQ программы, обрабатывал их, выдавал бы ответные данные. И по отсоединении клиента или по неактивности - убивать процесс. Как создать процесс, как организовать взаимодействие с основной программой (отдавать\получать строки) ? Где бы посмотреть описание и пример подобной программы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2005, 18:40 |
|
||
|
Обслуживание нескольких клиентов в разных потоках
|
|||
|---|---|---|---|
|
#18+
надо писать, какое средство разработки и какая ось у Вас. И на каком уровне работаете вообще. А абстрактно, если с сокетами - то когда сделан accept() - тут надо порождать новый thread(Java or WinAPI) или fork()-аться (Unix), передавая дочернему потоку(процессу) дескриптор сокета. И дальше с ним работать и умереть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2005, 22:43 |
|
||
|
Обслуживание нескольких клиентов в разных потоках
|
|||
|---|---|---|---|
|
#18+
--null--надо писать, какое средство разработки и какая ось у Вас. И на каком уровне работаете вообще. А абстрактно, если с сокетами - то когда сделан accept() - тут надо порождать новый thread(Java or WinAPI) или fork()-аться (Unix), передавая дочернему потоку(процессу) дескриптор сокета. И дальше с ним работать и умереть. а чем Unix хуже, там тоже треды есть. причем несколько реализаций :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2005, 23:34 |
|
||
|
Обслуживание нескольких клиентов в разных потоках
|
|||
|---|---|---|---|
|
#18+
конечно есть, это я так, для примера :-) Нам ваще неизвестно, в какой среде человек пишет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2005, 23:57 |
|
||
|
Обслуживание нескольких клиентов в разных потоках
|
|||
|---|---|---|---|
|
#18+
кстати, можно вообще без потоков обойтись воспользоваться select()'ом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2005, 00:04 |
|
||
|
Обслуживание нескольких клиентов в разных потоках
|
|||
|---|---|---|---|
|
#18+
он хочет в отдельном потоке. клиент всегда прав (c) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2005, 00:09 |
|
||
|
Обслуживание нескольких клиентов в разных потоках
|
|||
|---|---|---|---|
|
#18+
--null--конечно есть, это я так, для примера :-) Нам ваще неизвестно, в какой среде человек пишет. Спасибо за столь живое участие! 1) Программа - клиент ICQ - который принимает и отправляет строки - есть готовый (у него есть событие - "пришла строка от такого-то", есть функция - "отправить строку по такому-то номеру аськи"), на Delphi, ОС - WIN2000 2) Надо к этому клиенту приделать обработчик запросов пользователей - отдавать обработчику строки, и принимать от обработчиков строки. 3) "он хочет в отдельном потоке. клиент всегда прав (c)" - Как сделать без потоков - научите, буду делать без потоков. Просто хотелось обрабатывать клиентов не последвательно (пока работаем с одним - остальные ждут), а паралельно, сколько бы их не было (1-10 штук), ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2005, 12:54 |
|
||
|
Обслуживание нескольких клиентов в разных потоках
|
|||
|---|---|---|---|
|
#18+
Пользователь3) "он хочет в отдельном потоке. клиент всегда прав (c)" - Как сделать без потоков - научите, буду делать без потоков. Просто хотелось обрабатывать клиентов не последвательно (пока работаем с одним - остальные ждут), а паралельно, сколько бы их не было (1-10 штук), в C это делается при помощи select к описанной системе с событиями наверное не стоит прикручивать. select сам как система событий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2005, 13:32 |
|
||
|
Обслуживание нескольких клиентов в разных потоках
|
|||
|---|---|---|---|
|
#18+
select это наверное не в си, а в библиотеке сокетов. поскольку я использовал select и в delphi :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2005, 14:25 |
|
||
|
Обслуживание нескольких клиентов в разных потоках
|
|||
|---|---|---|---|
|
#18+
alex_kselect это наверное не в си, а в библиотеке сокетов. поскольку я использовал select и в delphi :-) The select function determines the status of one or more sockets, waiting if necessary, to perform synchronous I/O. На кой мне сокеты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2005, 20:14 |
|
||
|
Обслуживание нескольких клиентов в разных потоках
|
|||
|---|---|---|---|
|
#18+
Пользователь alex_kselect это наверное не в си, а в библиотеке сокетов. поскольку я использовал select и в delphi :-) The select function determines the status of one or more sockets, waiting if necessary, to perform synchronous I/O. На кой мне сокеты? а через что вы с клиентами общаетесь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2005, 20:28 |
|
||
|
Обслуживание нескольких клиентов в разных потоках
|
|||
|---|---|---|---|
|
#18+
ПользовательПрограмма - клиент ICQ - который принимает и отправляет строки авторНа кой мне сокеты? Так, стоп. Вам не нужны сокеты. Очевидно, эта прога работает через сокеты с ICQ, но вы не хотите в нее влезать, а хотите извне подцепитться и работать с ее данными? Каким образом это предполагается делать? Она консольная, предоставляет какие-то интерфейсы наружу, к которым можно подцепиться? Очень мало информации! Кстати, насколько я знаю, классический select работает не только с сокетами, но вообще с разными дескрипторами (файловыми и т.д.) "The functions select and pselect wait for a number of file descriptors to change status." Это Микрософт ее в winsock записал :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2005, 20:34 |
|
||
|
Обслуживание нескольких клиентов в разных потоках
|
|||
|---|---|---|---|
|
#18+
прочитал еще раз :-) Короче вот что Вам нужно - по приходе строчки сделать CreateThread() и дальше работать в новой нити. Третий параметр CreateThread() - собсна функция нити, а четвертый - указатель на ее аргументы. Таким образом можно в нить передать строчку. Дальше в нити ее можно обрабатывать и вернуть - ну тут любой способ. Нить в принципе видит все глобальные переменные процесса, поэтому можно поосто создать соответствующие списки и привязывать их элементы к порождаемым нитям или можно возвращать из нити значение с помощью какого-нибудь механизма IPC (того же канала). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2005, 20:41 |
|
||
|
Обслуживание нескольких клиентов в разных потоках
|
|||
|---|---|---|---|
|
#18+
--null--прочитал еще раз :-) Короче вот что Вам нужно - по приходе строчки сделать CreateThread() и дальше работать в новой нити. Третий параметр CreateThread() - собсна функция нити, а четвертый - указатель на ее аргументы. Таким образом можно в нить передать строчку. Дальше в нити ее можно обрабатывать и вернуть - ну тут любой способ. Нить в принципе видит все глобальные переменные процесса, поэтому можно поосто создать соответствующие списки и привязывать их элементы к порождаемым нитям или можно возвращать из нити значение с помощью какого-нибудь механизма IPC (того же канала). 1) Создать нить - буду разбираться - позжее доложу, 2) вернуть строку из нити - что есть IPC? И вообще - когда создаю нить - все понятно, а когда возвращаю строку - как отследить в основной программе событие - "такая то нить хочет вернуть строку данных"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2005, 08:14 |
|
||
|
Обслуживание нескольких клиентов в разных потоках
|
|||
|---|---|---|---|
|
#18+
IPC - inter process comminucation довольно расплывчатое понятие, хотя может быть есть некий стандартный механизм ipc. под виндой любят pipe использовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2005, 08:31 |
|
||
|
Обслуживание нескольких клиентов в разных потоках
|
|||
|---|---|---|---|
|
#18+
автора когда возвращаю строку - как отследить в основной программе событие для этого есть объекты синхронизации. Например, можно создать Mutex, занять его а потом WaitFroSingleObject или использовать Event-ы или еще что-то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2005, 10:06 |
|
||
|
|

start [/forum/topic.php?fid=16&tid=1347868]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 363ms |

| 0 / 0 |
