fastapi vue socket 从其他文件调用 socket 方法

需求:因为项目需要,边做边学python,这次需要使用socket功能,正常在main.py中写个socket,还是OK的,但是我想要在其他文件中,直接使用socketemit方法,需要在文件结构上进行一些调整。

使用到的第三方库:python-socketio
官方地址:https://python-socketio.readthedocs.io/en/latest/

1、写一下前端代码:

<template><div><h1>Hello Socket</h1></div>
</template>
<script>
import * as io from 'socket.io-client';
export default {mounted() {this.socket = io.connect("http://localhost:8000");this.socket.emit('Client', "Hello, Server!");this.socket.on("Server", args => {console.log(args)});}
}
</script>

2、下面是python代码
新建文件socket.py

import socketiobackground_task_started = Falsesio = socketio.AsyncServer(async_mode='asgi',cors_allowed_origins='*')    # logger=False)async def background_task():# Example of how to send server generated events to clients.count = 0while True:await sio.sleep(10)count += 1await sio.emit('Server', {'data': "Hello, Client"})@sio.event
async def connect(sid, environ):print(f'{sid} connected!')global background_task_startedif not background_task_started:sio.start_background_task(background_task)background_task_started = Trueawait sio.emit("Server", {'data': "Connect",'count': 0})@sio.event
async def disconnect(sid):print('disconnect', sid)

3、下面是main代码
controllers目录下,新建文件main.py

from fastapi import Depends, FastAPI, Header, HTTPException
from db.mongodb_utils import close_mongo_connection, connect_to_mongo
from fastapi.middleware.cors import CORSMiddleware
import socketio
from controllers.socket import sio
import uvicorn
import zmqdef get_app() -> FastAPI(title="接口",description="api",version="0.0.1"
):app = FastAPI()app.add_event_handler("startup", connect_to_mongo)app.add_event_handler("shutdown", close_mongo_connection)sio_app = socketio.ASGIApp(sio, other_asgi_app=app)app.mount('/', sio_app)return appapp = get_app()if __name__ == "__main__":uvicorn.run(app, host="0.0.0.0", port=8000)

4、其他文件中使用
在其他文件中使用,需要如下代码即可

from controllers.socket import sioawait sio.emit('Server',{'data': "大铁牛"})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/415079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工作187:表单校验规则

第一种常用方式&#xff1a;表单上加rules&#xff5b;object&#xff5d; <el-form class"apply-form first-form" :model"formData" :rules"rule" ref"form"><el-form-item label"姓名" prop"visitorName&…

AndroidStudio关联svn并上传代码到svn服务器上,更换域名

SVN安装选项 到下图位置选择【command line client tools】前面的下拉框&#xff0c;选择【Will be installed on local hard drive】&#xff0c;一直下一步知道安装完成即可。 打开AndroidStudio&#xff0c;按CtrlShifS快捷键&#xff0c;进入Settings设置页面。如上图所示…

docker安装postgres

1、拉取 postgres镜像 docker pull postgres2、开启容器 docker run --name Postgres-0 -e POSTGRES_PASSWORDpassword -d -p 5432:5432 postgres:latest3、打开命令行 docker exec -it Postgres-0 bash4、切换为管理员用户 psql -U postgres5、查看用户 \du6、继续创建数…

MySQL并发复制系列一:binlog组提交 (转载)

http://blog.csdn.net/woqutechteam/article/details/51178803 MySQL Binary log在MySQL 5.1版本后推出主要用于主备复制的搭建&#xff0c;我们回顾下MySQL 在开启/关闭 Binary Log功能时是如何工作的 。 MySQL没有开启Binary log的情况下&#xff1a; InnoDB存储引擎通过re…

工作188:表单校验规则

1绑定rules <el-dialog title"新建账号" :visible.sync"dialogFormVisible" close"close"><!--1.name--><el-form ref"form" :rules"rules" :model"form" size"medium" :label-width&q…

学习knex过程中好的参考资料整理

记录本人制作博客系统和学习knex找的相关资料链接&#xff1a; 1、博客系统 https://github.com/huoguozhang/my-blog/tree/master/models 2、与typescript结合&#xff0c;TypeScript Express Objection.js Knex.js MySQL https://github.com/corocn/ts-server/tree/61c…

js-----Date==字符串

<html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"> <title>js将当前时间转换为字符串日期</title> <script type"text/javascript" src"jquery-1.11.1.min.js"&…

Android Studio 项目断开SVN连接

Android Studio 断开 SVN 1.打开项目所在的文件夹&#xff0c;找到.idea文件夹 2.打开.idea文件夹&#xff0c;找到vcs.xml文件并打开 3.把vcs对应的值删掉&#xff0c;vcs“” 4.重要的来了&#xff0c;删除项目中关联svn时创建的svn隐藏文件。 在查看中设置显示隐藏的文…

工作189:配置表头即可

columns: [{type: "selection", width: "50"},{prop: "id", label: "ID", width: "60", sortable: true},{prop: "name", label: "账号名称", width: "100", sortable: true},{prop: "d…

什么是eager loading

在做objectionknexmysql技术栈开发过程中&#xff0c;进行关联数据查询时&#xff0c;遇到这个关键词eager loading,现在进行解释一下&#xff1a; eager loading其实就是preloading的意思。就是尽可能把后面需要的数据&#xff0c;通过最少的sql语句一起查询出来&#xff0c;从…

Robotium_断言方法assert、is、search

下面的这些方法都主要用来判断测试结果是否与预期结果相符&#xff0c;一般把is和search方法放在assert里面判断。assert最常用的还是assertThat方法&#xff0c;是Junit的判断&#xff0c;这里就不多说了。断言方法assert&#xff08;robotium特有的断言方式&#xff0c;实际项…

工作190:页面数据不显示

账户详情里面没有返回对应的字段 所以页面不显示

mysql两张主表person event加上第三张关联表

有两个对象&#xff0c;个人person、活动event。每个person可以参加多个event&#xff0c;每个event可以由多person参加。数据库表格如下&#xff1a; event - id [int (4),primary] - name [varchar (30)] - …person - id [int (4),primary] - name [varcha…

List的五种去重方式

一、String去重&#xff1a; //set集合去重&#xff0c;不改变原有的顺序public static void pastLeep1(List<String> list){System.out.println("list [" list.toString() "]");List<String> listNewnew ArrayList<>();Set setne…

python Shapely OSError: Could not find lib c or load any of its variants []

mac 升级过后&#xff0c;python项目运行报错python Shapely OSError: Could not find lib c or load any of its variants []。 在github上找到解决办法没记录如下&#xff1a; To recap, I removed anything dealing with conda that depends on geos: conda remove geos, s…

工作192:vue项目如何刷新当前页面

1.场景 在处理列表时&#xff0c;常常有删除一条数据或者新增数据之后需要重新刷新当前页面的需求。 2.遇到的问题 1. 用vue-router重新路由到当前页面&#xff0c;页面是不进行刷新的 2.采用window.reload()&#xff0c;或者router.go(0)刷新时&#xff0c;整个浏览器进行…

python保存文件,如果目录不存在,则创建

对于python 3.2 以上版本使用 import osfilename "/user/project/demo.txt" os.makedirs(os.path.dirname(filename), exist_okTrue) with open(filename, "w") as f:f.write("FOOBAR")

CentOS挂Windows的NFS备忘

Windows NFS 安装和配置 注&#xff1a;需要将名称为“所有计算机”的访问类型改为“无访问权限”&#xff0c;再将可访问IP的访问类型改为“读写”&#xff0c;并勾选“允许根目录访问” &#xff0c;如WINDOWS有防火墙开放“2049”端口 CentOS需要开启两个服务&#xff1a; y…

NotificationManager: notifyAsUser: tag=null, id=6, user=UserHandle{0}

Android studio 使用 targetSdkVersion 28 在Android系统大于等于8.0的时候&#xff0c;通知不显示bug解决方法&#xff1a; 1、修改appcompat版本&#xff0c;如果是小于v27 改为 implementation com.android.support:appcompat-v7:27.1.1 2、添加依赖 compile com.git…