每次交易后我应该关闭一个套接字(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.
}
。
答
我会让套接字在循环之外打开,重新连接每一次迭代看起来像是浪费资源。
答
我不会关闭插座。每次连接你都有一些握手。