websocket实现群聊
2024-09-06 15:51:01
server # @File: 群聊
from flask import Flask, render_template, request
from geventwebsocket.handler import WebSocketHandler
from gevent.pywsgi import WSGIServer
from geventwebsocket.websocket import WebSocket app = Flask(__name__)
user_socket_list = [] @app.route('/ws')
def ws():
# 一个用户的长链接wsgi.websocket
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)
while 1:
msg = user_socket.receive()
print(msg)
for usocket in user_socket_list:
if user_socket == usocket:
continue
try:
usocket.send(msg)
except:
continue @app.route('/')
def index():
return render_template("many_person.html") if __name__ == '__main__':
http_server = WSGIServer(("0.0.0.0", 7000), app, handler_class=WebSocketHandler)
http_server.serve_forever()
many_person.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <p>发送内容:<input type="text" id="message"><button onclick="send_msg()">发送</button></p>
<div id="msg_list" style="width: 500px"> </div> </body>
<script type="application/javascript"> var ws = new WebSocket("ws://192.168.12.41:7000/ws");
ws.onmessage = function (ws_status) {
console.log(ws_status.data);
var ptag = document.createElement("p");
ptag.innerText = ws_status.data;
document.getElementById("msg_list").appendChild(ptag)
};
function send_msg() {
var msg = document.getElementById("message").value;
var ptag = document.createElement("p");
ptag.style.cssText = "text-align: right";
ptag.innerText = msg;
document.getElementById("msg_list").appendChild(ptag);
ws.send(msg);
}
</script>
</html>
最新文章
- 使用ENode框架前您需要了解的东西(初稿)
- Spring 文章推荐
- Java中的枚举
- 记一次VNC远程连接Linux问题解决记录(5900端口测试、KDE桌面安装)
- animation of android (1)
- Java-基础编程(螺旋矩阵&;乘法表)
- Git一张图学习
- BA - 读书雷达10本必读书
- php 这门语言
- iOS面试题大全-点亮你iOS技能树
- android 自定义控件,自定义属性设置
- COM与.NET程序集导出和部署COM组件
- LAMP环境的搭建(四)----Apache下部署项目
- ajax的四种type类型
- PostgreSql扩展Sql-动态加载共享库(C函数)
- Hadoop wordcount Demon
- 解决Postman User-Agent 设置失效
- 2.ECS内 经典网络与VPC网络的区别
- <;Android 基础(二十一)>; Android 屏幕适配
- 用户登陆显示cpu、负载、内存信息
热门文章
- Centos6-编译安装Redis
- Hdu3785
- EF(Entity Framework)通用DBHelper通用类,增删改查以及列表
- day 18 面向对象的 继承
- app上架的照片尺寸大小
- jquery1.9是最后支持IE678
- 树状数组(二叉索引树 BIT Fenwick树) *【一维基础模板】(查询区间和+修改更新)
- UVA10480 Sabotage —— 最小割最大流
- “There&#39;s no Qt version assigned to this project for platform ” - visual studio plugin for Qt
- js程序开发-1