2011-09-04 28 views
3

我有一個超低延遲程序,需要與Windows COM組件接口。什麼是最快的方式來做到這一點?使用像JACOB這樣的COM橋,或者使用像ZeroMQ這樣的消息總線來發送本地COM庫併發送消息?Java COM橋

+0

我真的不明白爲什麼這兩個選項會實現相同。你能更好地描述你想達到的目標嗎?什麼是COM組件在做什麼?難道你沒有COM組件的結果,它需要儘可能低的延遲返回到某個地方嗎? – Codo

+0

Codo ...我通過第三方COM組件收到一個事件,我需要將它傳播到Java程序(實際數據非常小...只是幾個雙打)。我需要儘快做到這一點。 –

回答

1

如果您使用ZeroMQ,您將處理兩個過程。將消息從一個進程傳遞到另一個進程比在同一進程中執行同樣的操作要昂貴得多。所以使用Java COM橋將肯定會導致更低的延遲。

話雖如此,但它是唯一相關的,如果你正在處理extermely低延遲。如果你的COM組件已經有一個延遲比進程間消息傳遞高几倍的延遲(例如,因爲它通過網絡接收和轉發消息或者執行昂貴的計算),那麼任一選項都可以,因爲它們都對整體具有邊際影響潛伏。

請注意,JACOB不支持所有COM組件,只有那些具有COM自動化接口的組件。因此,您可能需要使用不同的Java COM橋接器,例如JCom。

+0

COM橋是否明顯比使用本地COM組件和ZeroMQ與本地消息傳遞更低的延遲?我會認爲在Java中使用COM會有一些開銷嗎? –

+0

進程內COM組件的開銷非常低,無論是在Java進程還是ZeroMQ進程中,您都可以在兩種設置中使用它。 Java-to-COM橋接的額外開銷取決於您使用的橋接產品,但它應該類似於對本地代碼的兩到三次調用。再說一遍:您可以在Java-to-COM橋接器中或從ZeroMQ接收消息時使用它。但是ZeroMQ解決方案肯定會有額外的費用來發送消息,將消息發送到另一個進程並執行進程上下文切換。 – Codo