flask + websocket实现简单的单聊和群聊
单聊
from flask import Flask,request,render_template
from geventwebsocket.handler import WebSocketHandler
from gevent.pywsgi import WSGIServer
from geventwebsocket.websocket import WebSocket
import json app = Flask(__name__) user_socket_dict = {} @app.route('/ws/<username>')
def ws(username):
user_socket = request.environ.get('wsgi.websocket') # type:WebSocket
user_socket_dict[username] = user_socket print(len(user_socket_dict),user_socket_dict) while 1:
try:
msg = user_socket.receive()
msg = json.loads(msg)
to_user = msg.get('to_user')
content = msg.get('msg')
usocket = user_socket_dict.get(to_user)
recv_msg = {
'from_user':username,
'msg':content
} usocket.send(json.dumps(recv_msg))
except:
pass @app.route('/chat')
def chat():
return render_template('chat.html') if __name__ == '__main__':
http_serv = WSGIServer(('0.0.0.0',5000),app,handler_class=WebSocketHandler)
http_serv.serve_forever()
python代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>单聊</title>
</head>
<body>
<input type="text" id="username">
<button onclick="open_ws()">连接服务器</button>
<p>给:<input type="text" id="to_user"></p>
<p>发送消息:<input type="text" id="msg"></p>
<button onclick="send_msg()">发送</button>
<div id="chat" style="width: 500px; height: 500px;"></div> <script type="text/javascript">
var ws = null;
function open_ws() {
var username = document.getElementById('username').value;
ws = new WebSocket('ws://192.168.19.34:5000/ws/' + username);
ws.onmessage = function (data) {
var msg = JSON.parse(data.data);
var ptag = document.createElement('p');
ptag.innerText = msg.from_user + ':' + msg.msg;
document.getElementById('chat').appendChild(ptag);
};
} function send_msg() {
var msg = document.getElementById('msg').value;
var to_user = document.getElementById('to_user').value;
var send_obj = {to_user:to_user,msg:msg};
ws.send(JSON.stringify(send_obj));
}
</script>
</body> </html>
页面
群聊
#!/usr/bin/env python
# -*- coding=utf-8 -*-
from flask import Flask,request,render_template
from geventwebsocket.handler import WebSocketHandler
from gevent.pywsgi import WSGIServer
from geventwebsocket.websocket import WebSocket
import json app = Flask(__name__) user_socket_list = [] @app.route('/ws')
def ws():
user_socket = request.environ.get('wsgi.websocket') # type:WebSocket
user_socket_list.append(user_socket)
print(len(user_socket_list),user_socket_list)
while 1:
try:
msg = user_socket.receive()
for usocket in user_socket_list:
if usocket != user_socket:
usocket.send(msg)
except:
user_socket_list.remove(user_socket) @app.route('/chat')
def chat():
return render_template('ws.html') if __name__ == '__main__':
http_serv = WSGIServer(('0.0.0.0',5000),app,handler_class=WebSocketHandler)
http_serv.serve_forever()
Python代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>发送消息:<input type="text" id="msg"></p>
<button onclick="send_msg()">发送</button>
<div id="chat" style="width: 500px;height: 500px;"></div>
<script type="text/javascript">
var ws = new WebSocket('ws://192.168.19.34:5000/ws');
ws.onmessage = function (data) {
var ptag = document.createElement('p');
ptag.innerText = data.data;
document.getElementById('chat').appendChild(ptag);
}; function send_msg() {
var msg = document.getElementById('msg').value;
ws.send(msg)
}
</script>
</body>
</html>
页面
flask + websocket实现简单的单聊和群聊的更多相关文章
- SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)
SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...
- ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(三) 之 实现单聊,群聊,发送图片,文件。
上篇讲解了如何搭建聊天服务器,以及客户端js怎么和layui的语法配合.服务器已经连接上了,那么聊天还会远吗? 进入正题,正如上一篇提到的我们用 Client.Group(groupId)的方法向客户 ...
- netty无缝切换rabbitmq、activemq、rocketmq实现聊天室单聊、群聊功能
netty的pipeline处理链上的handler:需要IdleStateHandler心跳检测channel是否有效,以及处理登录认证的UserAuthHandler和消息处理MessageHan ...
- 基于netty实现单聊、群聊功能
学习资料 https://juejin.im/book/5b4bc28bf265da0f60130116/section/5b6a1a9cf265da0f87595521 收获: 转载 1. Nett ...
- Flask实现简单的群聊和单聊
Flask是使用python写的一个简单轻量级的框架,今天我们使用Flask实现一个简单的单聊和群聊功能 . 主要思路 : 前端登录聊天室,聊天室信息包含用户的登录信息,相当于一个登录功能,会把这个信 ...
- Websocket实现群聊、单聊
Websocket 使用的第三方模块:gevent-websocket 群聊 ws群聊.py中的内容 from flask import Flask, request, render_template ...
- nodejs与websocket模拟简单的聊天室
nodejs与websocket模拟简单的聊天室 server.js const http = require('http') const fs = require('fs') var userip ...
- Asp.net SignalR 应用并实现群聊功能 开源代码
ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 Web 功能是指这样一种功能:当所连接的客户端变得可用时服务 ...
- 一套高可用、易伸缩、高并发的IM群聊架构方案设计实践
本文原题为“一套高可用群聊消息系统实现”,由作者“于雨氏”授权整理和发布,内容有些许改动,作者博客地址:alexstocks.github.io.应作者要求,如需转载,请联系作者获得授权. 一.引言 ...
随机推荐
- 后端&前端零碎知识点和注意问题
后端 1. Spring自带的MD5加密工具类 import org.springframework.util.DigestUtils; String md5Password = DigestUtil ...
- C++生成和解析XML文件
1.xml 指可扩展标记语言(EXtensible Markup Language) 2.xml 是一种标记语言,类似html 3.xml 的设计宗旨是传输数据,而非显示数据 4.xml 标签没有被预 ...
- c,使用lib,dll
lib使用: #include "xxx.h" // lib的头文件 #pragma comment(lib, "xxx.lib") 这样会将lib里的数据编译 ...
- git 学习笔记 ---标签管理
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本.将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来.所以,标签也是版本库的一个快照 ...
- Java核心技术梳理-IO
一.引言 IO(输入/输出),输入是指允许程序读取外部数据(包括来自磁盘.光盘等存储设备的数据).用户输入数据.输出是指允许程序记录运行状态,将程序数据输出到磁盘.光盘等存储设备中. IO的主要内容包 ...
- java之spring mvc之初始spring mvc
1. mvc : mvc框架是处理 http请求和响应的框架 2. mvc 做的事情有哪些: 将 url 映射到一个java的处理方法上 将表单数据提交到 java 类中 将后台 java 类处理的结 ...
- DotNet Core 2.2 MVC Razor 页面编译为 View.dll 文件的解决方法
使用文本文件编辑器打开项目文件,找到: <PropertyGroup> <TargetFramework>netcoreapp2.0</TargetFramewo ...
- 2019 波克城市ava面试笔试题 (含面试题解析)
本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.波克城市等公司offer,岗位是Java后端开发,最终选择去了波克城市. 面试了很多家公司,感觉大部分公司考察的点 ...
- Excel 2010同时打开2个或多个独立窗口
亲测有效 参考下面的网址 https://jingyan.baidu.com/article/86fae346acca7d3c49121ad4.html 1. 在win+r 输入框里面输入“rege ...
- 30个关于Shell脚本的经典案例(下)
本文目录 21.从FTP服务器下载文件 22.连续输入5个100以内的数字,统计和.最小和最大 23.将结果分别赋值给变量 24.批量修改文件名 25.统计当前目录中以.html结尾的文件总大 26. ...