WebSocket 是HTML5的新功能,在HTML5之前,HTML还不支持WebSocket,当时如果要进行实时的内容更新则需要使用到轮询技术。
客户端一直发请求,服务端一直收请求,直到服务端给客户端响应。
优点:响应及时
缺点:消耗两端资源,非常严重,占用大量带宽
客户端发起请求,服务收到请求,内部进行轮询等待
优点:响应及时,节省资源,不会一直发送求情和响应
缺点:服务器资源消耗
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()
<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>
服务器响应,并以key、vlue形式存储用户与用户地址。
当某一 ws 向服务器发送信息时,服务器遍历字典中,向里面每一个用户发送信息。
ws 断开连接时,从用户字典中剔除用户信息。
原文:https://www.cnblogs.com/Dream-huang/p/9513817.html