我有一个Java程序(称之为Jack)和一个Objective-C程序(称之为Oscar),我在同一台Mac OS X计算机上运行该程序。奥斯卡通过套接字向Jack发送一条字符串消息,每秒一次。通过套接字从Objective-C发送数据到Java
对于可靠性和性能来说,在Jack和Oscar之间保持一个开放的插座会更好吗?或者反复打开套接字,发送消息,然后再次关闭套接字会更好?
我有一个Java程序(称之为Jack)和一个Objective-C程序(称之为Oscar),我在同一台Mac OS X计算机上运行该程序。奥斯卡通过套接字向Jack发送一条字符串消息,每秒一次。通过套接字从Objective-C发送数据到Java
对于可靠性和性能来说,在Jack和Oscar之间保持一个开放的插座会更好吗?或者反复打开套接字,发送消息,然后再次关闭套接字会更好?
保持打开状态。您将需要很多(每秒一次),并且在打开新套接字时会涉及一些开销。另外,你会用新对象啃堆,直到垃圾收集器来临。
对不起,我很快就读到了这个问题。是的,如果它在本地机器上,我会保持该套接字打开。打开和关闭每个需要分配的内存是没有意义的。在这种情况下来回研磨将无济于事。
为了正确理解,您正在编写一个Cocoa服务器应用程序,它只是侦听连接,以便它可以将某些数据传递给Java应用程序,该应用程序无法访问从Cocoa API返回的信息?
您确定无法从Java中的终端命令中获取结果吗?我完全猜测,但我认为如果是这样的话,你可以改善你打算做的事情。
进行Java本地接口调用会更容易吗?就我个人而言,我认为在本地搞混插座可能有点矫枉过正,但是再一次,我不知道你想要完成什么的全部故事。
这是一条评论,不是答案。我想下一个问题是如果你由于某种原因使用两台机器而不是一台。 – OscarRyz 2009-07-10 15:55:05
保持它打开杰克,保持它打开。我需要一些CPU周期才能打开和关闭连接,只有在下一秒再次打开连接。
如果您可以放弃一个或两个数据包,则可能需要使用UDP。
偶尔,长时间的TCP连接会变得有点时髦,并在连接不良时挂起。通常恢复,但并不总是 - 同时他们可以变得缓慢。
UDP由操作在你每次重新发送一次所有的数据,并不需要每一个数据包,因为你不关心历史的情况下,更好地...
保持开放的连接可能为你工作,理论上是好的...我只是不总是有最好的运气。
这不是真的在网络上。两个进程在同一台机器上本地运行。 我需要定期获取一些不能通过Java获得的Mac系统信息。 – 2009-07-10 15:45:23