2011-04-13 73 views
9

可能重复:
Should I close a socket (TCPIP) after every transaction?插座应保持打开或拆除

可以说我有某种类型的使用套接字,工程进程间通信。

我的进程应该建立一个连接并保持打开状态(每个客户端有1个线程或类似的线程)在需要时发送数据;或者是一种更好的方法来简单地建立连接,发送我希望的数据,关闭它并再次进入我的等待状态?

这个问题的解决方法通常是什么?

+0

出于好奇,为什么在命名管道上套接字? – 2011-04-13 05:24:30

+0

在我的情况下,我在Android应用程序和C#之间架起了一座桥梁,所以我不认为管道是合适的(或可能的)? – 2011-04-13 05:31:23

+0

进程间是指同一台机器上不同进程间的通信,所以我问,如果他们在不同的机器上,那么客户机服务器或对等机器是正确的字。 – 2011-04-13 05:39:44

回答

3

本地套接字没有太多开销,因为它们跳过了TCP/IP协议栈并且使用命名管道实现。保持插座打开和关闭不会有太大的区别。

+1

只有当您专门打开一个Unix域套接字时,本地套接字才会跳过TCP/IP堆栈 - 可用的地方。 – gby 2011-04-13 05:15:56

2

任何资源,无论是文件,套接字,数据库连接或硬件设备,需要时间和使用的处理器和内存来打开,因为它有获取资源,计算安全访问,并做一些簿记。

每个消息之间的打开和关闭只会浪费CPU和内存资源。

长时间保持打开状态也很危险,但您必须保持打开状态并确定最佳超时值,以便在任何一端死亡时自动关闭它。