tornado WebSocket詳解



1.什么是WebSocket
websocket和長輪詢的區別是客戶端和服務器之間是持久連接的雙向通信。
協議使用ws://URL格式,但它在是在標准HTTP上實現的。

2.tornado的WebSocket模塊
tornado在websocket模塊中提供了一個WebSocketHandler類,這個類提供了和已連接的客戶端通信的WebSocket事件和方法的鈎子。
open方法,新的WebSocket連接打開時被調用。
on_message方法:連接收到新消息時被調用。
on_close方法:客戶端關閉時被調用。
write_message方法:向客戶端發送消息時被調用。
close方法:關閉連接時調用。

3.WebSocket使用示例
1)和http長輪詢中示例一樣,區別在於“主頁長輪詢商品當前庫存”的方式。

class WebSocketHandler(tornado.websocket.WebSocketHandler):
    def open(self):
        self.application.shoppingCart.register(self.callback)

    def on_close(self):
        self.application.shoppingCart.unregister(self.callback)

    def on_message(self):
        pass

    def callback(self,count):
        self.write_message('{"inventorycount":"%s"}'%count)

on_close方法:在客戶端關閉時被調用。
on_message方法:因為服務端不需要接收客戶端消息,所以這里是個空函數

2)客戶端WebSocket請求如下

function requestInventory() {
    var host = 'ws://localhost:9999/websocket';

    var websocket = new WebSocket(host);

    websocket.onopen = function (evt) { };
    websocket.onmessage = function(evt) {
        $('#count').html($.parseJSON(evt.data)['inventoryCount']);
    };
    websocket.onerror = function (evt) { };
}

3)運行結果
打開多個客戶端,當做添加/刪除操作時,可以觀察到庫存數量會實時變動。

4.WebSocket和長輪詢
WebSocket和長輪詢的不同之處在於使用了一個持久的長連接,來代替長輪詢中循環發送請求連接。

 參考資料:http://docs.pythontab.com/tornado/introduction-to-tornado/ch5.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM