我有一個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