每次交易后我应该关闭一个套接字(TCPIP)吗?

每次交易后我应该关闭一个套接字(TCPIP)吗?

问题描述:

我已经写了一个TCPIP服务器,它实现了FileSystemWatcher,并用从FSW获取的新文件中分析的数据填充队列。每次交易后我应该关闭一个套接字(TCPIP)吗?

单个客户端将连接到该服务器并向队列请求数据(其他客户端不需要随时连接)。如果没有数据存在,客户端将等待(1秒)并重试。我的问题是:客户端是否应该为每个事务创建一个新的套接字(在while循环中),还是让套接字在while循环之外打开?

client.Connect() 

while(bCollectData) 
{ 
    ... communicate ... 

    Thread.Sleep(1000); 
} 

client.Shutdown(SocketShutdown.Both); 
client.Close(); 

我建议你离开套接字打开,甚至更好地阻止它在服务器上,以便你不必做Thread.Sleep。当服务器有一些数据时,他会将消息发送给客户端。

的代码将使用这种方法,你会立刻得到所有的信息,避免客户端和服务器之间发送不需要的邮件(返回该服务器没有数据的消息)是这个样子

while(bCollectData) 
{ 
    _socket.recv(...); //this line will wait for response from server 
    //... process message and start another wait in the next iteration. 
} 

我会让套接字在循环之外打开,重新连接每一次迭代看起来像是浪费资源。

我不会关闭插座。每次连接你都有一些握手。