2013-02-21 4 views
1

У меня есть асинхронный сервер с немного измененной версией этого MSDN article. Это позволяет только одному клиенту присоединиться.Должен ли я открывать и закрывать сокеты за транзакцию?

Мой вопрос: нормально ли мне открывать и закрывать сокет для каждой транзакции (он использует TCP)? Если я разрешу нескольким клиентам присоединиться (путем изменения кода прослушивать больше клиентов), кажется, что некоторые из сообщений являются перекрестными. Например, если я попытаюсь загрузить файл с сервера с двух клиентов, в зависимости от того, какой клиент начал последний, он получает файл и первый раз. Или, если я начну отправлять некоторые данные от одного клиента, а затем начать с другого клиента, сервер получил смесь обоих.

Поскольку моя программа не требует высокой производительности (например, игры), есть ли проблемы с открытием/закрытием сокета на транзакцию или есть лучший способ обработки нескольких клиентов?

Редактировать - Я забыл упомянуть, что сам слушатель останется открытым на протяжении всей жизни, но каждый клиент откроет и закроет новый сокет для самой транзакции. В коде в ссылке MSDN переменная является «обработчиком».

ответ

3

В открывающихся и закрывающих гнездах имеются накладные расходы, поэтому короткий ответ отсутствует (на стороне слушателя). Это просто лучшая практика, хотя, если вы не беспокоитесь об этом, тогда используйте все, что работает.

Когда дело доходит до клиента, использование сокетов действительно зависит от того, как часто вы планируете отправлять данные. Если редко, то открытие гнезда на короткий период, вероятно, является нормой. Если вы заметили какой-либо «перекрестный разговор», это, скорее всего, связано с ошибкой в ​​вашем коде. Для некоторых ссылок проверяйте классы TcpClient и TcpListener в MSDN.

+0

Как HTTP удается сделать это, не вызывая накладных расходов? –

+0

Сокеты (для прослушивания), как правило, остаются открытыми для срока службы приложения, например. для HTTP, который является сокетом TCP на порту 80. Каждый клиент, который подключается, по существу, существует только в своем «сеансе». – MarcF

+0

Я считаю, что он оставил открытое гнездо для прослушивания, если я не понял этот вопрос неправильно, он говорит об открытии и закрытии клиентских сокетов. –

Смежные вопросы