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.应作者要求,如需转载,请联系作者获得授权. 一.引言 ...
随机推荐
- AntDesign vue学习笔记(一)初始化项目
最近学习AntDesign组件使用,官方Pro例子集成度太高,不容易学习,将从最基础组件一个一个搭建. 1.创建Vue Cli项目 2.引入ant design组件 $ cnpm i --save a ...
- C# int uint long ulong byte sbyte float double decimal 范围,及类型!
static void Main(string[] args) { Console.WriteLine(" byte {0,7:g}{1,32:g}{2,32:g}",typeof ...
- Java基础---Java环境配置
java 下载:https://www.java.com/zh_CN/ 1.Java安装:jdk9 2. JAVA_HOME 环境变量的配置 在DOS命令行下使用这些工具,就要先进入到JDK的bin目 ...
- C++和c语言的区别
在大家眼中c++与C语言很像,但两个有本质的区别,C语言是面向过程的,而C++是面向对象的,下面就给大家梳理梳理. 1.C语言有标准的函数库,它们松散的,只是把功能相同的函数放在一个头文件中:而C++ ...
- Delphi百度文字识别【支持通用文字识别、身份证识别、银行卡识别、驾驶证识别、行驶证识别、车牌识别等功能】
作者QQ:(648437169) 点击下载➨Delphi百度文字识别 百度api文档 [Delphi百度文字识别]支持 通用文字识别.通用文字识别(高精度版).通用文字识别(含位置信 ...
- Linux环境下进程的CPU占用率
阿里云服务器网站:https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=qqwovx6h 文字来源:http://www.s ...
- qt5信息提示框QMessageBox用法(很全)
information QMessageBox::information(NULL, "Title", "Content", QMessageBox::Yes ...
- ELK学习笔记之配置logstash消费kafka多个topic并分别生成索引
0x00 filebeat配置多个topic filebeat.prospectors: - input_type: log encoding: GB2312 # fields_under_root: ...
- virsh 添加虚拟交换机
virsh 添加虚拟交换机 来源 https://blog.csdn.net/a1987463004/article/details/90905981 vim /etc/libvirt/qemu/ne ...
- centos7划分vlan
1. lsmod|grep 8021q 确认内核是够载入了802.1q模组 2.modprobe -a 8021q 如果没载入使用这个命令载入模组 3.配置vlan需要vconfig命令,由于c ...