群聊版

安装

pip install gevent-websocket  

 

视图

  1. # -*- coding: utf-8 -*-  
  2. import json  
  3. from flask import Flask, request, render_template  
  4. from geventwebsocket.handler import WebSocketHandler  # 导入websocker的方法  
  5. from gevent.pywsgi import WSGIServer  
  6.    
  7. app = Flask(__name__)  
  8.    
  9. user_socker_list = []  # 保存所有的websocker对象  
  10.    
  11. @app.route('/ws/<usename>')  
  12. def ws(usename):  
  13.     # print(request.headers)  
  14.     user_socker = request.environ.get('wsgi.websocket')  # type  WebSocket  
  15.    
  16.     """  
  17.     readyState: 3  连接正常,然后断开  
  18.     readyState: 1  表示正常连接  
  19.     """  
  20.     if user_socker:  
  21.         user_socker_list.append(user_socker)  
  22.         while 1:  
  23.             msg = user_socker.receive()  # 接收消息  
  24.             print(msg)  # 接受完信息后断开,所有加循环变成长连接  
  25.             for u_socker in user_socker_dict:  
  26.                 if u_socker == user_socker:  
  27.                     continue  
  28.                 try:  
  29.                     u_socker.send(msg)  
  30.                 except:  
  31.                     continue  
  32.    
  33.     return render_template('ws.html')  

前端

  1. <!DOCTYPE html>  
  2. <html lang="en">  
  3. <head>  
  4.     <meta charset="UTF-8">  
  5.     <title>ws</title>  
  6. </head>  
  7. <body>  
  8. <input type="text" id="msg"> <button onclick="snd_msm()">发送</button>  
  9.    
  10. <div id="chat_list" style="width: 500px; height: 500px;">  
  11.    
  12. </div>  
  13.    
  14. </body>  
  15.    
  16. <script type="application/javascript">  
  17.     var ws = new WebSocket('ws://192.168.32.71:5000/ws');  {# 设置websocker连接 #}  
  18.     ws.onmessage = function (data) {  
  19.         console.log(data.data);  {# 数据在datadata里面 #}  
  20.         var ptag = document.createElement('p');  
  21.         ptag.innerText = data.data;  
  22.         document.getElementById('chat_list').appendChild(ptag)  
  23.    
  24.     }; {# 打印收到的数据 #}  
  25.        
  26.     function snd_msm() {  
  27.         var msg = document.getElementById('msg').value;  
  28.         ws.send(msg)  
  29.     }  
  30. </script>  
  31. </html>  
12-17 17:54