У меня есть серверное приложение (одноэлементное, простое консольное приложение .NET), которое взаимодействует с GlobalCache GC-100-12 для маршрутизации ИК-команд. Различные клиенты .NET WinForm в локальной сети подключаются к моему серверному приложению и отправляют ему команды ASCII. Серверное приложение ставит эти команды ASCII в очередь и затем отправляет их в GC-100-12 через TCP-соединение.
Мой вопрос: как лучше всего справиться с этим соединением с точки зрения сервера? Я могу придумать два пути:
Создайте и откройте новый TcpClient для каждого отдельного запроса. Закройте TcpClient, когда запрос будет выполнен.
Создайте и откройте один TcpClient при запуске сервера и используйте keep-alive (если необходимо), чтобы соединение оставалось открытым в течение всего срока службы объекта сервера.
Я задаю этот вопрос, потому что я задаюсь вопросом о накладных расходах на создание нового TcpClient для каждого запроса. Это дорогая операция? Это плохая практика?
В настоящее время я делаю # 1 и печатаю результаты каждой передачи на консоль. Иногда время ожидания некоторых соединений и команда не маршрутизируются, и мне было интересно, было ли это из-за накладных расходов на создание нового TcpConnection каждый раз, или это происходит из-за чего-то еще.
Я могу видеть # 2 более сложным, потому что, если соединение теряет связь, оно должно быть воссоздано, и для этого потребуется немного больше кода.
Я ищу общий совет по этому вопросу. У меня нет большого опыта работы с классом TcpClient.