2012-05-14 82 views
75

我一直在閱讀websockets中的ping/pong消息以保持連接的活躍,但我不確定它們是什麼。它是一個獨特的框架類型? (我沒有看到與乒乓相關的chrome中的JavaScript WebSocket對象上的任何方法)。或者它只是一種設計模式(例如,我直接向服務器發送「ping」或任何其他字符串並使其響應)。乒乓球是否與延續幀有關?從瀏覽器發送websocket ping/pong框架

我問的原因是我使用的是在Mongrel2後面運行的python框架,所以我想知道是否有辦法發送Mongrel2一個特定的ping/pong消息,告訴它保持連接沒有我的活python應用程序需要擔心它。類似於有一個單獨的HTTP方法,我猜。我想像一個專用的ping/pong消息幀可能比字符串「ping」更簡單(服務器和網絡上的負載更少),儘管這可能無關緊要。

編輯:我只是看着RFC 6455它看起來像Ping和Pong肯定是控制幀類型與自己的操作碼。那麼我如何從Chrome瀏覽器發送一個Ping框架?

+0

剛剛從服務器ping。每個人都知道非標準端口上的網絡問題,所以他們開始平時定期進行ping。我想你可以ping一個寫得不好的服務器,但是對它做任何敏感的事情可能都不太聰明。 – 2014-02-10 13:48:28

回答

84

沒有JavaScript API發送ping幀或接收pong幀。這可以由您的瀏覽器支持,也可以不支持。也沒有API來啓用,配置或檢測瀏覽器是否支持並正在使用ping/pong幀。這裏有discussion about creating a Javascript ping/pong API。將來ping有可能是可配置/可檢測的,但Javascript不可能直接發送和接收ping/pong幀。

但是,如果您同時控制客戶端和服務器代碼,則可以在更高級別上輕鬆添加ping/pong支持。如果你還沒有,你需要在消息中使用某種消息類型頭/元數據,但這很簡單。除非您計劃每秒發送ping數百次或者擁有數千個同時發生的客戶端,否則開銷將會很小,無法自行完成。

+4

那真是不幸。謝謝你的答案,正是我所期待的。 – danny

+7

很遺憾ping/pong還沒有在JavaScript WebSocket新的API中實現。另一方面,該功能的自定義實現應該非常簡單。雖然有好的迴應(+1) – Tom

22

Ping只能從服務器發送到客戶端,瀏覽器應該儘快用Pong OpCode自動回答。所以你不必擔心更高的水平。

雖然並非所有瀏覽器都支持標準,但它們在實現這種機制時可能會有一些差異,甚至可能意味着沒有Pong響應功能。但是我個人使用的是Ping/Pong,並且從來沒有見過客戶端沒有在低層客戶端實現上實現這種類型的OpCode和自動響應。

+0

有趣的是,服務器發起呼叫確實更有意義。你使用什麼網絡服務器? – danny

+0

我在.Net/Mono上使用自己的WebSockets協議來實現我自己的樂趣。來源可以在這裏找到https://github.com/Maksims/gh12-server – moka

+1

在我的測試中,我絕對發現不支持ping/pong的普通瀏覽器;不記得哪一個 –