У меня есть веб-приложение ASP.NET CORE MVC, которое для определенных задач должно взаимодействовать с TcpServer. У меня есть класс в веб-приложении, который управляет запросами к этому TcpServer.
Мой клиентский класс Tcp содержит метод с именем Request (строковое сообщение), который должен использоваться моим веб-приложением ASP.Net для вызова TcpServer и возврата ответа TcpServer. Метод идет так:
public string Request(string message)
{
// Open stream and client.
TcpClient client = new TcpClient(this._ipAddr, this._port);
NetworkStream stream = client.GetStream();
// Write to stream
Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
stream.Write(data, 0, data.Length);
// Read from stream to get response. Read 256 bytes at a time so
// as not to overload the system in case requests are ginormous.
Byte[p] data = new Byte[256];
string responseData = "";
int bytesRead;
while ( (bytesRead = stream.Read(data, 0, 256)) > 0)
{
responseData += System.Text.Encoding.ASCII.GetString(data, 0, bytesRead);
}
// Close stream and client
stream.Close();
client.Close();
return responseData;
}
Обратите внимание, что я вызываю этот метод много раз в приложении. Поэтому я постоянно обновляюсь (и для этого подключаюсь) и закрываю как TcpClient, так и NetworkStream.
Я посмотрел документы MSDN и переполнение стека. Все примеры, которые я вижу, отправляют только один запрос. Это не очень помогает мне, так как я буду отправлять запросы много раз на протяжении всей жизни веб-приложения. Это будет очень частый запрос. Я хочу понять, как с этим справиться.
Я плохо знаком с TCP-серверами и клиентами. Каков правильный жизненный цикл? Как правильно использовать TcpClient и NetworkStream?
Если быть более точным, должен ли я обновлять и закрывать TcpClient при каждом запросе? Или же TcpClient должен быть одноэлементным, который открыт на протяжении всего жизненного цикла моего веб-приложения ... В этом случае я предполагаю, что поток - это то, что я должен открывать и закрывать для каждого запроса.