首页 > Web开发 > 详细

WebSocket

时间:2019-02-27 22:00:38      阅读:145      评论:0      收藏:0      [点我收藏+]

一、WebSocket简介

  • 顾名思义即:Web + Socket,它是一中TCP协议,当客户端和服务器完成握手,建立连接后,ws 就如普通 socket 一样,在两者之间进行通信。
  • WebSocket 是HTML5的新功能,在HTML5之前,HTML还不支持WebSocket,当时如果要进行实时的内容更新则需要使用到轮询技术。

 

轮询

客户端一直发请求,服务端一直收请求,直到服务端给客户端响应。

  • 优点:响应及时

  • 缺点:消耗两端资源,非常严重,占用大量带宽

 

长轮询

客户端发起请求,服务收到请求,内部进行轮询等待

  • 优点:响应及时,节省资源,不会一直发送求情和响应

  • 缺点:服务器资源消耗

 

二、如何使用WebSocket

1. Flask+WebSocket(单聊版low)

技术分享图片
from flask import Flask,request,render_template
from geventwebsocket.websocket import WebSocket  # Websocket语法提示
from geventwebsocket.handler import WebSocketHandler  # 处理Websocket请求头
from gevent.pywsgi import WSGIServer  # 在处理http请求时还能处理websocket请求

app = Flask(__name__)

@app.route("/index")
def index():

    return render_template("ws.html")


@app.route("/web")
def web():
    # 获取用户的socket连接, 并开启语法提示
    user_socket = request.environ.get("wsgi.websocket")  # type:WebSocket
    if not user_socket:
        return "请使用websocket方式连接"
    while True:
        # 获取用户发送的信息
        user_msg = user_socket.receive()
        print(user_msg)
        data = input("回复:").strip()
        user_socket.send(data)


if __name__ == __main__:
    # app.run("0.0.0.0", 8000, debug=True)
    # 当请求进来之后,如果是websocket请求交给WebSocketHandler处理之后再交给APP处理。
    http_serv = WSGIServer(("0.0.0.0",8000), app,handler_class=WebSocketHandler)
    http_serv.serve_forever()
Python代码
技术分享图片
<script type="application/javascript">
    var ws = new WebSocket("ws://127.0.0.1:8000/web");
    ws.onopen = function () {
        ws.send("加油")
    };

    ws.onmessage = function (serv_msg) {
        console.log(serv_msg.data)
    }
</script>
HTML代码

 

2. Flask+WebSocket(群聊版low)

 

 

 

 

 

 

 

 

三、WebSocket + Flask实现实时更新

实现思路:

  1. 客户端发起 ws 连接请求。
  2. 服务器响应,并以key、vlue形式存储用户与用户地址。

  3. 当某一 ws 向服务器发送信息时,服务器遍历字典中,向里面每一个用户发送信息。

  4. ws 断开连接时,从用户字典中剔除用户信息。

 

创建服务端

 

WebSocket

原文:https://www.cnblogs.com/Dream-huang/p/9513817.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!