2009-02-27 73 views
0

我有一个服务器应用程序(单例,简单的.NET控制台应用程序),与GlobalCache GC-100-12进行通信,用于路由IR命令。本地网络上的各种.NET WinForm客户端连接到我的服务器应用程序并向其发送ASCII命令。服务器应用程序将这些ASCII命令排队,然后通过TCP连接将它们发送到GC-100-12。在C#中处理这个TCP连接的首选方法是什么?

我的问题是,从服务器的角度来处理这种连接的最佳方式是什么?我可以想到两种方法:

  1. 为每个单独的请求创建并打开一个新的TcpClient。当请求完成时关闭TcpClient。

  2. 在服务器启动时创建并打开一个TcpClient,并使用保持活动状态(如有必要)在服务器对象的生命周期中保持连接处于打开状态。

我问这个问题,因为我想知道为每个请求创建一个新的TcpClient开销。这是一项昂贵的手术吗?这是一种不好的做法吗?

目前我正在做#1,并将每次传输的结果打印到控制台。偶尔某些连接会超时,并且命令不会被路由,我想知道是否这是因为每次创建新的TcpConnection的开销,或者是由于其他原因。

我可以看到#2更复杂,因为如果连接断开,它必须被重新创建,并且需要更多的代码来处理这种情况。

我在找这方面的一般建议。我没有很多使用TcpClient类的经验。

回答

3

我们有一个打开telnet会话到一个老的基于PICK的系统的例子。我们发现,每次请求进入时打开TCP连接的开销都相当昂贵,我们决定实施一个禁止例行程序来保持连接处于打开状态。这更复杂,但只要您的终点不是为许多客户服务,那么固定连接听起来像是一个可行的解决方案。

如果您想防止在没有流量时保持连接打开,您也可以将其设置为有超时。五分钟没有活动,然后关闭连接。

相关问题