【Flask+SocketIO】如何用Flask做一个快捷迷你的局域网聊天室
【背景】
疫情期间公司原有的沟通方式变得少了,由于行业特殊性又不太好在社交媒体或者第三方聊天工具上沟通信息,所以想自己快速构建一个聊天室供业务的同事们使用。
【设计】
考虑到发布的便利性和ID管理,聊天记录等功能的追加,我选择用Flask+SocketIO的方式完成核心聊天室功能的搭建。至于保存数据到Log,做查询页面等,原本更是Flask能力范围内的事情,驾轻就熟,后续再追加即可。
【代码】
用Pycharm新建一个项目,暂时用不到DB这些,所以文件夹只需要一个简单的templates用来放唯一的页面模板即可,命名为index.html,py主程序命名为server.py
index.html:
<!DOCTYPE HTML>
<html>
<head><title>Socket-Test</title><script src="//code.jquery.com/jquery-1.12.4.min.js"></script><script src="//cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js"></script><script type="text/javascript" charset="utf-8">$(document).ready(function() {namespace = '/test';var socket = io(namespace);socket.on('connect', function() {socket.emit('my_event', {data: 'connected to the SocketServer...'});});socket.on('my_response', function(msg, cb) {$('#log').append('<br>' + $('<div/>').text('logs #' + msg.count + ': ' + msg.data).html());if (cb)cb();});$('form#emit').submit(function(event) {socket.emit('my_event', {data: $('#emit_data').val()});return false;});$('form#broadcast').submit(function(event) {socket.emit('my_broadcast_event', {data: $('#broadcast_data').val()});return false;});$('form#disconnect').submit(function(event) {socket.emit('disconnect_request');return false;});});</script>
</head>
<body style="background-color:white;"><h1 style="background-color:white;">Socket</h1><form id="emit" method="POST" action='#'><input type="text" name="emit_data" id="emit_data" placeholder="Message"><input type="submit" value="Send Message"></form><form id="broadcast" method="POST" action='#'><input type="text" name="broadcast_data" id="broadcast_data" placeholder="Message"><input type="submit" value="Send Broadcast Message"></form><form id="disconnect" method="POST" action="#"><input type="submit" value="Disconnect Server"></form><h2 style="background-color:white;">Logs</h2><div id="log" ></div>
</body>
</html>
server.py:
from flask import Flask, render_template, session, copy_current_request_context
from flask_socketio import SocketIO, emit, disconnect
from threading import Lockasync_mode = None
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socket_ = SocketIO(app, async_mode=async_mode)
thread = None
thread_lock = Lock()@app.route('/')
def index():return render_template('index.html', async_mode=socket_.async_mode)@socket_.on('my_event', namespace='/test')
def test_message(message):session['receive_count'] = session.get('receive_count', 0) + 1emit('my_response',{'data': message['data'], 'count': session['receive_count']})@socket_.on('my_broadcast_event', namespace='/test')
def test_broadcast_message(message):session['receive_count'] = session.get('receive_count', 0) + 1emit('my_response',{'data': message['data'], 'count': session['receive_count']},broadcast=True)@socket_.on('disconnect_request', namespace='/test')
def disconnect_request():@copy_current_request_contextdef can_disconnect():disconnect()session['receive_count'] = session.get('receive_count', 0) + 1emit('my_response',{'data': 'Disconnected!', 'count': session['receive_count']},callback=can_disconnect)if __name__ == '__main__':socket_.run(app, debug=True,host="192.168.3.106",port="5100")
可以看见,除了index是正常路由,其他都是socket修饰方法。
【Flask+SocketIO】如何用Flask做一个快捷迷你的局域网聊天室相关推荐
- 【网络编程知识】使用Socket通信,做一个简单的多人聊天室
- 如何用Excel做一个战斗模拟器(一)升级经验表
如何用Excel做一个战斗模拟器(二)属性表 如何用Excel做一个战斗模拟器(三)战斗过程模拟 目录索引 引言 确定战斗公式与怪物强度 确定人物升级经验 确定人物升级时间 确定升级所需经验 引言 作 ...
- 如何用Excel做一个战斗模拟器(三)战斗过程模拟
如何用Excel做一个战斗模拟器(一)升级经验表 如何用Excel做一个战斗模拟器(二)属性表 目录索引 定义战斗子过程 定位战斗双方基础属性 利用基础属性与战斗公式进行计算 战斗过程的运算与输出 判 ...
- android 画笔压痕效果,【自制样机教程】如何用Ps做一个压痕效果的Logo样机
原标题:[自制样机教程]如何用Ps做一个压痕效果的Logo样机 上次教你们做的自制小糖袋的 贴图样机 不知道你们玩耍的咋样 今天再给你们介绍一个logo的样机 这次的教程主要用到了图层样式 来看看怎么 ...
- 如何用css做一个爱心
摘要:HTML的标签都比较简单,入门非常的迅速,但是CSS是一个需要我们深度挖掘的东西,里面的很多样式属性掌握几个常用的便可以实现很好看的效果,下面我便教大家如何用CSS做一个爱心. 前期预备知识: ...
- 【CSS】如何用css做一个爱心
摘要:HTML的标签都比较简单,入门非常的迅速,但是CSS是一个需要我们深度挖掘的东西,里面的很多样式属性掌握几个常用的便可以实现很好看的效果,下面我便教大家如何用CSS做一个爱心. 前期预备知识: ...
- 如何用Excel做一个战斗模拟器(四)装备的掉落与展示
如何用Excel做一个战斗模拟器(一)升级经验表 如何用Excel做一个战斗模拟器(二)属性表 如何用Excel做一个战斗模拟器(三)战斗过程模拟 目录索引 定义掉落表与装备表 怪物本身掉落装备 定义 ...
- 如何用Excel做一个战斗模拟器(二)属性表
如何用Excel做一个战斗模拟器(一)升级经验表 如何用Excel做一个战斗模拟器(三)战斗过程模拟 目录索引 属性表 属性表 首先确定人物的生命.攻击.防御.暴击值与闪避值属性.用公式将其设定为与等 ...
- 仟龙教您如何用html做一个酷炫掉渣的点名器
本文关键详细介绍了如何用html做一个酷炫掉渣的点名器,原文中根据示例编码详细介绍的十分详尽,对大伙儿的学习或是工作中具备一定的参照学习使用价值,必须的小伙伴们下边伴随着我来一起学习学习吧 此点名器逐 ...
- 如何用硬盘做一个家庭存储中心?
如何用硬盘做一个家庭存储中心?其实没有那么难 转载来源:http://www.sohu.com/a/258686386_100026927 写这篇文文的初衷是因为悟空问答上回答过这个题目,发现&quo ...
最新文章
- 前端质量提升利器-马可代码覆盖率平台
- HTML5培训分享:HTML5全栈工程师是什么?
- 服务器ie打不开http协议,在浏览器输入地址后,这个世界发生了什么(http协议浅谈)...
- Git工作笔记004---torisegit使用时Updates were rejected because the tip of your current branch i
- python中的数据类型中int表示_python中的基本数据类型之 int bool str
- LeetCode 410. Split Array Largest Sum
- Visual Studio Code中的无标题(工作区)
- centos 修改时区及NTP时间同步
- PHP token检验
- python_PDF合成软件_ZHOU125disorder_
- Unity获得汉字拼音或首字母
- php怎么生成缩略图,php怎么生成缩略图
- NXP S32K146 FLEXI2C底层驱动+IAM-20680(一)
- 欢迎关注异贝!今天与您一起分享服装行业异贝引客方案设计!
- windows10常见故障排查
- csc.exe(C# 编译器)
- 给Android手机设置的壁纸应该是多大尺寸
- 0基础学Python有多难?
- 西门子1200 PLC CRC效验程序功能块
- 反编译工具ILSpy