zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    js格式化货币金额
    Mac idea maven 创建web项目
    The string "--" is not permitted within comments.
    Java从数据库读取页面树形菜单
    oracle 查询重复数据并且删除, 只保留一条数据重复数据
    SSM框架---使用MyBatis Generator自动创建代码
    前端 NPM常用命令行
    前端常用命令行
    Angular 常用命令行
    JS/JQuery 文档加载完成
  • 原文地址:https://www.cnblogs.com/shijingjing07/p/6558668.html
Copyright © 2011-2022 走看看