首页 文章

在C#中处理此TCP连接的首选方法是什么?

提问于
浏览
0

我有一个服务器应用程序(单例,简单的.NET控制台应用程序),它与GlobalCache GC-100-12对话以便路由IR命令 . 本地网络上的各种.NET WinForm客户端连接到我的服务器应用程序并向其发送ASCII命令 . 服务器应用程序将这些ASCII命令排队,然后通过TCP连接将它们发送到GC-100-12 .

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

  • 为每个请求创建并打开一个新的TcpClient . 请求完成后关闭TcpClient .

  • 在服务器启动时创建并打开一个TcpClient,并使用keep-alive(如果需要)在服务器对象的生命周期内保持连接打开 .

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

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

我可以看到#2更复杂,因为如果连接确实丢弃,则必须重新创建,这将需要更多的代码来处理这种情况 .

我正在寻找关于此的一般建议 . 我没有很多使用TcpClient类的经验 .

1 回答

  • 3

    我们有一个类似的例子,即打开一个旧的基于PICK的系统的telnet会话 . 我们发现,每次请求进入时打开TCP连接的成本都相当昂贵,我们决定实施一个无操作例程来保持连接打开 . 它更复杂,但只要您的终点不是为许多客户提供服务,那么固定连接听起来就像一个可行的解决方案 .

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

相关问题