我需要定期与plc通信(每1秒),我发送消息,然后收到消息.我用Socket这个班来进行这种交流.我是否需要每1秒打开一次连接(socket=new Socket(ipaddress, port)),发送消息socket.close()等等,或者一直保持套接字操作?
我假设你在这里谈论TCP套接字......
除了每秒建立TCP连接所涉及的明显效率低下之外,您还可能最终累积套接字TIME_WAIT(希望在您的客户端上).
我在TIME_WAIT博客上写了关于服务器可扩展性和稳定性的问题以及它引起的问题:http://www.serverframework.com/asynchronousevents/2011/01/time-wait-and-its-design-implications-换协议和可扩展-servers.html
鉴于您打开和关闭套接字的速率(每秒一次将导致240(60*4)个套接字TIME_WAIT处于正常(4分钟)2MSL TIME_WAIT期间)这应该不会证明太多问题,假设TIME_WAIT套接字是最终在客户端上,而不是在服务器上,假设你没有每秒都连接到很多服务器,但是......如果你有很多客户端每秒都连接到你的服务器而你没有确定你的服务器没有t累积套接字处于TIME_WAIT状态,那么您可能会限制服务器的可伸缩性.
另一种方法是保持套接字连接打开,只有在它被中断时才重新打开它.对于您最初编程,这可能会稍微复杂一些,但以这种方式汇集连接可能会更加高效(当您需要发送数据时,您只需发送数据而不需要通过TCP握手来设置连接)并在客户端上提高资源效率; 你永远不会持有240个插座TIME_WAIT......