zoukankan      html  css  js  c++  java
  • WebSocket

    WebSocket 是一种 在单个tcp链接上进行全双工通信的协议。
    让客户端和服务器之间的数据交换变得简单, 允许服务端主动向客户端推送数据。
    浏览器和服务器只需要完成一次握手, 两者之间就直接可以创建持久性的链接, 并进行双向数据传输。

    轮询推送技术,浏览器需要向服务器发HTTP请求, 然后服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,
    既浏览器需要不断的向服务器发请求,然而真正的有效数据只有很小的一部分,显然会浪费带宽。

    在这种情况下,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。
    优点, 较少的控制开销。 先创建连接,保持连接状态。

    实现WebSocket连接

    from geventwebsocket.server import WSGIServer # 我要WSGI为我提供服务
    from geventwebsocket.handler import WebSocketHandler # WSGI遇到ws协议的时候,处理方式
    from geventwebsocket.websocket import WebSocket # 语法提示用

    基于Flask + geventwebsocket

    from flask import Flask, request

    实例化flask

    app = Flask(name)

    @app.route("/ws")
    def my_ws_func():
    # print(dir(request.environ))
    user_socket = request.environ.get("wsgi.websocket") # type:WebSocket
    # web + socket
    print(user_socket)
    while 1:
    msg = user_socket.receive() # 接收 ,等客户端发消息
    print(msg)
    user_socket.send(msg)

    """['class', 'contains', 'delattr', 'delitem', 'dir', 'doc', 'eq', 'format', 'ge', 'getattribute', 'getitem', 'gt', 'hash', 'init', 'init_subclass', 'iter', 'le', 'len', 'lt', 'ne', 'new', 'reduce', 'reduce_ex', 'repr', 'setattr', 'setitem', 'sizeof', 'str', 'subclasshook', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']"""

    启动

    if name == 'main':
    # app.run()
    http_ser = WSGIServer(("0.0.0.0", 9878), application=app, handler_class=WebSocketHandler)
    http_ser.serve_forever()

  • 相关阅读:
    电脑处理器i5和i7的区别,如何选择?
    趣漫揭秘!中国程序员生存现状?
    趣漫揭秘!中国程序员生存现状?
    程序员职业规划
    程序员职业规划
    盘点程序员开发遇到的30个问题
    盘点程序员开发遇到的30个问题
    推荐VSCode12个比较实用的插件
    Flask之模板之宏、继承、包含
    Flask之模板之控制语句
  • 原文地址:https://www.cnblogs.com/asdlo/p/10456957.html
Copyright © 2011-2022 走看看