长连接 Websocket


import json from flask import Flask,request,render_template from geventwebsocket.handler import WebSocketHandler # 提供WS协议处理 from geventwebsocket.server import WSGIServer # 承载服务 from geventwebsocket.websocket import WebSocket # 语法提示 app = Flask(__name__) @app.route(" ") def (): return if __name__ == '__main__': # app.run("0.0.0.0",9527) http_serv = WSGIServer(("0.0.0.0",9527),app,handler_class=WebSocketHandler) http_serv.serve_forever()

  

私聊(。py)

 客户端
# 服务端
# Http  Flask 浏览器
# Websocket GeventWebsocket+Flask 客户端JavaScript(Websocket客户端)

from flask import Flask,request,render_template
from geventwebsocket.handler import WebSocketHandler  # 提供WS协议处理
from geventwebsocket.server import WSGIServer  # 承载服务
from geventwebsocket.websocket import WebSocket  # 语法提示

app = Flask(__name__)

user_socket_list = []

@app.route("/my_socket")
def my_socket():
    # 获取当前客户端与服务器的Socket连接  request.environ 获取的是请求的原始信息
    user_socket = request.environ.get("wsgi.websocket") # type:WebSocket
    

  if user_socket: user_socket_list.append(user_socket) print(len(user_socket_list),user_socket_list) # print(user_socket,"OK 连接已经建立好了,接下来发消息吧")

  while 1: msg = user_socket.receive() #服务器等待 客户端发完消息往下处理 不发消息等待 print(msg) for usocket in user_socket_list: try: usocket.send(msg) except: continue # user_socket.send(msg) # print(request.headers) @app.route("/gc") def gc(): return render_template("gc.html") if __name__ == '__main__': # app.run("0.0.0.0",9527) http_serv = WSGIServer(("0.0.0.0",9527),app,handler_class=WebSocketHandler) http_serv.serve_forever()
私聊 。html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>私聊</title>
</head>
<body>
<p>我的昵称:<input type="text" id="username">
  <button onclick="loginGc()">登录</button>
</p>
<p>给<input type="text" id="to_user">发送<input type="text" id="content">
  <button onclick="send_msg()">发送</button>
</p>

<div id="chat_list">

</div>
</body>
<script type="application/javascript">
    var ws = null;


    function loginGc() {
        var username = document.getElementById("username").value;
        ws = new WebSocket("ws://192.168.16.56:9527/my_socket/" + username);
        // 监听电话
        ws.onmessage = function (eventMessage) {
            console.log(eventMessage.data);
            str_obj = JSON.parse(eventMessage.data);

            var p = document.createElement("p");
            p.innerText = str_obj.from_user +" : "+str_obj.chat;
            document.getElementById("chat_list").appendChild(p);
        };
    };

    function send_msg() {
        var username = document.getElementById("username").value;
        var to_user = document.getElementById("to_user").value;
        var content = document.getElementById("content").value;
        var sendStr = {
            from_user:username,
            to_user:to_user,
            chat:content
        };
        ws.send(JSON.stringify(sendStr));
    };

</script>
</html>

  

猜你喜欢

转载自www.cnblogs.com/qj696/p/11252938.html