• tornado   websocket
  • 轮询
    • 客户端定时去请求服务端,  是客户端主动请求来促使数据更新
  • 长轮询
    • 客户端请求服务端,但是服务端并不是即时返回,而是当有内容更新的时候才返回内容给客户端,从流程上讲,可以理解为服务器向客户端推送内容;
  • websocket
    • WebSocket是通过单个TCP连接提供全双工(双向通信)通信信道的计算机通信协议。此WebSocket API可在用户的浏览器和服务器之间进行双向通信。用户可以向服务器发送消息并接收事件驱动的响应,而无需轮询服务器。 它可以让多个用户连接到同一个实时服务器,并通过API进行通信并立即获得响应。
    • tornado服务端websocket
       1 from tornado.web import RequestHandler, authenticated
       2 from pycket.session import SessionMixin
       3 from tornado.websocket import WebSocketHandler
       4
       5
       6 class BaseHandle(RequestHandler, SessionMixin):
       7     def get_current_user(self):
       8         current_user = self.session.get('login')
       9         if current_user:
      10             return current_user
      11
      12
      13 class BaseWebSocket(WebSocketHandler, SessionMixin):
      14     def get_current_user(self):
      15         current_user = self.session.get('login')
      16         if current_user:
      17             return current_user
      18
      19
      20 class IndexHandle(BaseHandle):
      21     @authenticated
      22     def get(self):
      23         self.render('websocket.html')
      24
      25
      26 class WebSocketHandle(BaseWebSocket):
      27     user = set()
      28
      29     def open(self):
      30         WebSocketHandle.user.add(self)
      31         for i in self.user:
      32             i.write_message("{}上线了!".format(self.current_user))
      33
      34     def on_message(self, message):
      35         for i in self.user:
      36             i.write_message("{}说{}".format(self.current_user, message))
      37
      38     def on_close(self):
      39         WebSocketHandle.user.remove(self)
      40         for i in self.user:
      41             i.write_message("{}下线了!".format(self.current_user))
      42
      43
      44 class LoginHandle(BaseHandle):
      45     def get(self):
      46         next_url = self.get_argument('next', '')
      47         self.render('login.html', next_url=next_url)
      48
      49     def post(self):
      50         username = self.get_argument('username', '')
      51         password = self.get_argument('password', '')
      52         next_url = self.get_argument('next', '')
      53         if username == password and next_url:
      54             self.session.set('login', 'true')
      55             self.redirect(next_url)
      56         elif username == password:
      57             self.set_secure_cookie('login', 'true')
      58             self.write('登录成功!')

    • 导入WebSocketHandler类
    • 创建BaseWebSocket类,该类继承WebSocketHandler和SessionMixin
    • 重写get_current_user方法用于验证登录
    • 创建websocket类,继承BaseWebSocket
    • 重写open,on_message,on_close
      • open: websocket客户端与服务端连接的时候使用
      • on_message: 服务端收到消息的时候调用
      • on_close:断开连接的时候调用
      • write_message:发送消息
    • 创建视图类,返回含有websocket服务的页面
       1 <!DOCTYPE html>
       2 <html lang="en">
       3 <head>
       4     <meta charset="UTF-8">
       5     <title>WebSocket</title>
       6     <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css">
       7 </head>
       8 <body>
       9 <div>
      10     <textarea name="" id="text" cols="30" rows="10" placeholder="请输入您的内容"></textarea>
      11     <a href="javascript:websocket()" class="btn btn-primary">发送</a>
      12     <ul id="message"></ul>
      13 </div>
      14 <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
      15 <script type="text/javascript">
      16     var msg = document.getElementById("message");
      17     msg.innerHTML = "发送成功";
      18     var socket = new WebSocket("ws://39.108.125.89:1996/websocket");
      19     socket.onopen = function () {
      20         alert("聊天打开")
      21     };
      22     socket.onmessage = function (data) {
      23         var receive = data.data;
      24         var message = $("<li>" + receive + "</li>");
      25         $(msg).append(message);
      26     };
      27     socket.onclose = function () {
      28         msg.innerHTML = msg.innerHTML + "<br>连接关闭..."
      29     };
      30
      31     function websocket() {
      32         socket.send($("#text").val())
      33     }
      34 </script>
      35 </body>
      36 </html>

    • 效果显示

转载于:https://www.cnblogs.com/ivy-blogs/p/10859735.html

tornado websocket相关推荐

  1. python tornado websocket_python tornado websocket 多聊天室(返回消息给部分连接者)

    1 #-*-coding:utf-8-*- 2 __author__ = 'zhouwang' 3 importjson4 importtornado.web5 importtornado.webso ...

  2. tornado+websocket+mongodb实现在线视屏文字聊天

    最近学了tornado和mongo,所以结合websocket 实现一个聊天功能,从而加深一下相关知识点的印象 1.websocket概览 webscoket是一种全双工通信模式的协议,客户端连接服务 ...

  3. Python下tornado实现webSocket实现

    在上一篇中我们简单介绍了WebSocket及Python下Tornado架构中Websocket的实现,下面我们就直接上一个源码: 服务器端程序: -------------------------- ...

  4. python tornado websocket_基于Python Tornado框架的websocket服务

    WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议. Tornado中定义了tornado.websocket.WebSocketHandler来处理webs ...

  5. 如何使用Tornado实现WebSocket服务器?

    什么是龙卷风? (What is Tornado?) Tornado is a python web framework and asynchronous networking library. It ...

  6. tornado的websocket处理

    https://github.com/facebook/tornado/blob/master/tornado/websocket.py 转载于:https://www.cnblogs.com/cly ...

  7. Python用tornado的websocket开发聊天室

    Python用tornado的websocket开发聊天室 用tornado开发基于异步websocket聊天室-demo 目录结构 Python包 main.py app/views.py temp ...

  8. 《Introduction to Tornado》中文翻译计划——第五章:异步Web服务

    http://www.pythoner.com/294.html 本文为<Introduction to Tornado>中文翻译,将在https://github.com/alioth3 ...

  9. 客户端与服务器持续同步解析(轮询,comet,WebSocket)

    作者:盼逆邵年来源:博客园发布时间:2012-02-10 20:42  阅读:1943 次原文链接[收藏] 在B/S模型的Web应用中,客户端常常需要保持和服务器的持续更新.这种对及时性要求比较高的应 ...

  10. 开源服务器Tornado的初步了解

    文章结束给大家来个程序员笑话:[M] 明天看了下Python的一个新web框架,由Facebook开源.不得不说,品牌效应啊,只要是Facebook开源的目项,没有不好用的.Tornado可以说是好用 ...

最新文章

  1. java.lang.ClassNotFoundException: Didn't find class org.apache.http.Protoco
  2. 机器学习算法学习---模型融合和提升的算法(五)
  3. Get Started with Apex Unit Tests
  4. word里的多级列表和项目编号是什么区别?
  5. python程序设计典型例题-python 大题 典型
  6. Daily Scrum4 11.6
  7. EMOS 如何停止反病毒和防垃圾邮件功能
  8. 【图像处理】——图像特效处理(马赛克、图像融合、毛玻璃等)
  9. 安装openstack_午餐前如何安装OpenStack Cloud
  10. nashorn预编译_Java 8:在新的Nashorn JS引擎中编译Lambda表达式
  11. linux+mysql+导出备份_Linux系统MySQL备份的导入导出的具体分析
  12. Android之旅--Handler与多线程
  13. 计算机应用基础考试试题,2017计算机应用基础考试试题及答案
  14. centos mysql5.7.17_在centos 7下安装mysql 5.7.17
  15. 基础集合论笔记 目录
  16. LVM 逻辑卷管理(实战篇)
  17. 基于ARM的SoC设计入门
  18. 安全合规/ISO--1--ISO 27000系列标准介绍
  19. 数据存储之SwiftJSON
  20. Linux基础之计算机网络

热门文章

  1. 2018杭电多校第六场1009(DFS,思维)
  2. Expression Blend4 中文
  3. Linux服务器双网卡双IP和单网卡双IP配置方法(Debian/Ubuntu)
  4. mysql federated engine
  5. Nodejs实现一个http反向代理
  6. SCOM 2012 RC 升级到 SCOM 2012 RTM 手记
  7. load data infile 补充
  8. Swagger 3.0 官方 starter 诞生,野生的可以扔了!
  9. 去阿里面试被问:如果是MySQL引起的CPU消耗过大,你会如何优化?
  10. 给IT人的15点建议:苦逼程序员的辛酸反省与总结