首頁>Program>source

我有两个通過TCP / IP进行通訊的元件.元件A充当服務器/侦听器,而元件B充当客戶端.两者應尽快沟通.任何時候都只能有一个連線(尽管此問题除外).我公司的一位高級開發人員表示,我需要在两个元件之間使用應用程式級心跳,以確保連線保持打開狀態.

我认為使用TCP / IP可以保持連線打開,但是我讀過许多博客/站點,這是在這些應用程式之間进行心跳檢測的非常標準的做法.

我知道元件A心跳元件B的部分原因是,它可以在元件B存在通訊問题(鏈接斷開或元件B未執行)時通知支援人員.是否由於其他原因需要心跳? 例如要確保"管道中"经常有东西保持打開狀態?

元件A当前每20秒對元件B进行一次心跳檢測,如果在120​​秒內没有收到来自元件B的任何返迴訊號,則關闭連線.然後,如果元件B会在鏈路斷開時定期尝試重新連線,則它將繼續侦听連線.這可以成功工作.

重申我的問题:是否必须保持心跳才能保持TCP / IP連線的活動?

最新回復
  • 6月前
    1 #

    連線應该保持打開,無論如何,但是看到協議實現通常是很常见的 為了帮助檢測到斷開的連線,請使用心跳訊號,例如使用PING命令进行IRC。

  • 6月前
    2 #

    如许多其他人所指出的那樣,如果將TCP連線留给自己的設備,它將保持連線狀態.但是,如果您在連線中間有一个跟蹤其狀態的設備(例如防火墙),則可能需要保持活動狀態以防止狀態表條目過期。

  • 6月前
    3 #

    如果您的元件是 :

      are in a conventional wired network

      there are no firewalls or NAT routers between them

      neither of them crash

    那麼您就不需要心跳了。

    如果這些假設中的任何一个都不成立(我在看着您,GPRS!),心跳就變得非常必要。

  • 6月前
    4 #

    您不需要自己發送心跳.無論使用什麼,TCP連線都將保持打開狀態。

    請註意,TCP實現了可選的keepalive機製,该機製可用於及時標識已關闭的連線,而不是要求您稍後發送資料然後才發現連線已關闭。

    p

    如果使用windows,請註意TCP保持活動狀態.預設情况下,它是禁用的,除非您使用windows登錄檔或通過setsockopt全域性將其打開。

    預設的保持活動間隔為2小時.

    http://msdn.microsoft.com/en-us/library/ms819735.aspx

    如果不希望2小時保持活動狀態,則可能需要實現自己的心跳並在windows上禁用TCP保持活動狀態。

  • ios:仪器分配跟蹤使用者定義類的物件的分配和取消分配
  • rscript:將命令列引數傳遞给R CMD BATCH