У меня есть асинхронный сервер с немного измененной версией этого MSDN article. Это позволяет только одному клиенту присоединиться.Должен ли я открывать и закрывать сокеты за транзакцию?
Мой вопрос: нормально ли мне открывать и закрывать сокет для каждой транзакции (он использует TCP)? Если я разрешу нескольким клиентам присоединиться (путем изменения кода прослушивать больше клиентов), кажется, что некоторые из сообщений являются перекрестными. Например, если я попытаюсь загрузить файл с сервера с двух клиентов, в зависимости от того, какой клиент начал последний, он получает файл и первый раз. Или, если я начну отправлять некоторые данные от одного клиента, а затем начать с другого клиента, сервер получил смесь обоих.
Поскольку моя программа не требует высокой производительности (например, игры), есть ли проблемы с открытием/закрытием сокета на транзакцию или есть лучший способ обработки нескольких клиентов?
Редактировать - Я забыл упомянуть, что сам слушатель останется открытым на протяжении всей жизни, но каждый клиент откроет и закроет новый сокет для самой транзакции. В коде в ссылке MSDN переменная является «обработчиком».
Как HTTP удается сделать это, не вызывая накладных расходов? –
Сокеты (для прослушивания), как правило, остаются открытыми для срока службы приложения, например. для HTTP, который является сокетом TCP на порту 80. Каждый клиент, который подключается, по существу, существует только в своем «сеансе». – MarcF
Я считаю, что он оставил открытое гнездо для прослушивания, если я не понял этот вопрос неправильно, он говорит об открытии и закрытии клиентских сокетов. –