我有一个服务器应用程序(单例、简单的 .NET 控制台应用程序),它与 GlobalCache GC-100-12 进行通信以路由 IR 命令。本地网络上的各种 .NET WinForm 客户端连接到我的服务器应用程序并向其发送 ASCII 命令。服务器应用程序将这些 ASCII 命令排队,然后通过 TCP 连接将它们发送到 GC-100-12。
我的问题是,从服务器的角度来看,处理此连接的最佳方法是什么?我可以想到两种方法:
为每个单独的请求创建并打开一个新的 TcpClient。请求完成后关闭 TcpClient。
在服务器启动时创建并打开一个 TcpClient 并使用 keep-alive(如有必要)在服务器对象的生命周期内保持连接打开。
我问这个问题是因为我想知道为每个请求创建一个新的 TcpClient 的开销。这是一项昂贵的手术吗?这是一个不好的做法吗?
目前我正在做#1,并将每次传输的结果打印到控制台。有时一些连接超时并且命令没有被路由,我想知道这是因为每次创建新的 TcpConnection 的开销,还是因为其他原因。
我可以看到#2 更复杂,因为如果连接确实断开,则必须重新创建它,这将需要更多代码来处理这种情况。
我正在寻找有关此的任何一般性建议。我没有很多使用 TcpClient 类的经验。