|
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|||||||||||||||||||||
Проверка на стороне сервера, что клиент обработал отправленные данные25.10.2012, 12:07. Показов 3198. Ответов 2
Метки нет (Все метки)
Есть клиент и есть сервер, общаются по именованому каналу (named pipe)
Проблема: нужно сделать так чтобы сервер после записи данных в поток проверял прочитал ли их клиент и если не прочитал то давал ему на это время (допустим 500 мс, думаю этого достаточно) и если за это время клиент так и не считал данные то сервер разрывал подключение дабы поток не простаивал в ожидании. Проблема в том что просто запись в поток всегда ждёт пока клиент завершит чтение (хоть он там и пол часа висеть будет и не захочет читать с потока данные), а асинхронная запись происходит сразу же и не даёт никакого доп. времени клиенту на чтение. Из тех методов что нашёл у NamedPipeServerStream есть: pipeServer.WaitForPipeDrain(); - никакого толку, ждёт завершение всех операций, те по сути считай что асинхронная запись превратилась в синхронную и опять возможен висяк потока на долгое время WriteTimeout / ReadTimeout; - тоже никакого толку так как выбрасывается исключение что NamedPipeServerStream не поддерживает таких вещей. Ещё конечно же остался вариант в сервере после записи данных написать:
Как в таких случаях поступают подскажите пожалуйста, ато сам я решение найти не смог. Код моего сервера и клиента (асинхронные операции не используются пока что). Моя обёртка через которую происходит чтение и запись в поток при общении между клиентом и сервером:
0
|
|||||||||||||||||||||
| 25.10.2012, 12:07 | |
|
Ответы с готовыми решениями:
2
Boost::Asio клиент - сервер: При вводе с телнета на стороне сервера появляется куча крякозябр Так поступают данные в программу обработчик находящююся на стороне сервера? Нужно узнать, сколько времени пользователь провел на данной странице и затем записать данные в БД на стороне сервера. |
|
|
||||||
| 25.10.2012, 20:44 | ||||||
|
Если нет ожидания с таймаутом, то его всегда можно сэмулировать через потоки.
После отправки, создаете поток, в котором вызываете WaitForPipeDrain. После чего ждете окончания потока с таймаутом.
1
|
||||||
|
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
| 26.10.2012, 00:49 [ТС] | |
|
turbanoff, спасибо, сейчас попробую.
Добавлено через 2 часа 11 минут В общем этот подход до конца не решает мои проблемы. Я как делаю: запускаю 4 потока сервера и они там себе ждут клинетов, в каждом есть while(true) так что после обслуживания очередного клиента как только он отключается поток сервера ждёт сл. клиента и так всё время. Если я в main создам 4 потока и буду потом пользоваться описанным методом то возникает куча проблем. Во первых придёться теперь же завершать поток каждый раз так как иначе эта моя ловушка на зависший поток прибъёт его, она же не в курсе что он уже другого клиента обслуживает ну и в связи с этим появляются проблемы... Смоделирую проблему: есть 4 потока, к каждому подключился какой-то клиент. 1 поток работает 400 мс, 2, 3 и 4 спраляются за 10мс. Так как в main у меня будет bool isTerminated = waitThread.Join(500); то перезапуск первого потока произойдёт через 500 мс (мейн ждёт завершения этой операции так что мейн "висит"), но так как перезапуск остальных потоков идёт после перезапуска первого то потоки 2, 3, 4 тоже висят 500 мс ![]() Добавлено через 27 минут В общем-то мне нужно что-то что будет пристреливать потоки которые повысли в ожидании, но если поток продолжает обработку то и трогать его не надо ... Другое дело как определять что он продолжает работу...
0
|
|
| 26.10.2012, 00:49 | |
|
Помогаю со студенческими работами здесь
3
С сервера отправить данные на клиент Передать данные с сервера на клиент Клиент на Android не получает данные с сервера Как правильно передавать данные с сервера на клиент (игра) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
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 .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|