首页 > 其他分享 >FastAPI学习-31 FastAPI 如何集成 socket.io

FastAPI学习-31 FastAPI 如何集成 socket.io

时间:2024-01-28 17:00:38浏览次数:28  
标签:socket socketio fastapi 31 io FastAPI 版本

前言

socket.io就是基于 websocket 封装的一个库,主要特点是能够进行实时的双向通讯,主要应用场景有实时的聊天,数据实时分析,数据传输,文件协同合作。

有个 socket.io 的fastapi-socketio官方库,该库依赖传统的 python-socketio 库

环境准备

pip install fastapi-socketio

fastapi 服务端代码demo

from fastapi import FastAPI
from fastapi_socketio import SocketManager
import uvicorn
 
app = FastAPI()
socket_manager = SocketManager(app=app, mount_location="/ws")
 
@socket_manager.on('connect',namespace="/ws")
async def connect(sid, environ):
    print(sid)
    print(environ)
 
 
if __name__ == "__main__":
    uvicorn.run(app, host="localhost", port=8000)

web 前端页面

<!DOCTYPE html>
<html>
<head>
    <title>web</title>
    <meta charset="UTF-8">
    <script type="text/javascript" src="/static/jquery-3.5.1.min.js"></script>
    <script type="text/javascript" src="https://cdn.bootcss.com/socket.io/1.5.1/socket.io.min.js"></script>

</head>
<body>
    <div id="terminal"></div>
</body>
<script>
$(document).ready(function () {
  // 连接服务器
  const socket = io('ws://localhost:8000/ws', {
      transports: ['websocket'],
      path:'/ws/socket.io'
    });

  // 连上后console输出
  socket.on("connect",
      () => { console.log("Connected", socket.id)
  });

})
</script>
</html>

如果服务器出现报错:The client is using an unsupported version of the Socket.IO or Engine.IO protocols (further occurrences of this error will be logged with level INFO)

说明fastapi-socketio 与 js版本客户端不匹配,二者不能正常通信。兼容版本说明

匹配正确版本

先查看安装的 python-socketio 和 python-engineio 版本,版本有点高,于是我降级了一下版本

pip install --upgrade python-engineio==3.13.2
pip install --upgrade python-socketio==4.6.0

socket.io.min.js版本也需要找到对应的https://cdn.bootcss.com/socket.io/1.5.1/socket.io.min.js

全部的 socket.io.js 版本可以在这个地址找到https://cdn.socket.io/

版本匹配后,重新启动服务就可以看到客户端连接服务端成功,输出日志

服务端也启动正常

参考相关教程资料https://blog.csdn.net/wangsenling/article/details/128568432
参考相关教程资料https://blog.csdn.net/momoyaoquaoaoao/article/details/127256068

标签:socket,socketio,fastapi,31,io,FastAPI,版本
From: https://www.cnblogs.com/yoyoketang/p/17992986

相关文章

  • 无涯教程-Socket.IO - 聊天示例
    现在我们已经很熟悉Socket.IO,让我们编写一个聊天应用程序,可以在不同的聊天室中使用它进行聊天,我们将允许用户选择用户名,并允许他们使用他们聊天。因此,首先,让我们设置HTML文件以请求用户名-<!DOCTYPEhtml><html><head><title>HelloLearnfk</title></head><......
  • 无涯教程-Socket.IO - 命名空间
    Socket.IO允许您"Namespaces命名"Socket,这实际上意味着分配不同的端点。这是一项有用的函数,可通过在通信通道之间引入分隔来最大程度地减少资源(TCP连接)的数量,并同时在您的应用程序内分隔关注点。多个命名空间实际上共享同一WebSockets连接,从而为我们节省了服务器上的Socket端口......
  • 无涯教程-Socket.IO - 广播服务
    Broadcasting意味着向所有连接的客户端发送消息,我们可以将消息发送给所有连接的客户端,我们可以使用io.sockets.emit方法。注意-这将向所有连接的客户端ALL发出事件(该事件可能触发了此事件的Socket)。在此示例中,我们将向所有用户广播已连接客户端的数量。更新app.js文件......
  • 无涯教程-Socket.IO - 应用示例
    创建一个名为app.js的文件,然后输入以下代码来设置快速应用程序-varapp=require('express')();varhttp=require('http').Server(app);app.get('/',function(req,res){res.sendfile('index.html');});http.listen(3000,function(){conso......
  • 无涯教程-Socket.IO - 环境
    要开始使用Socket.IO进行开发,您需要安装Node和npm(节点程序包管理器)。如果您没有这些,请转到节点设置,以在本地系统上安装节点。通过在终端中运行以下命令来确认已安装节点和npm。node--versionnpm--version您应该得到类似于以下内容的输出:v17.3.08.3.0打开终端,并在......
  • 无涯教程-Socket.IO - 简介
    Socket.IO是用于实时Web应用程序的JavaScript库。它支持Web客户端和服务器之间的实时双向通信。它包括两个部分:在浏览器中运行的客户端库和用于node.js的服务器端库,这两个组件具有相同的API。实时应用实时应用程序(RTA)是在用户感知为即时或当前的时段内运行的应用程序。实......
  • P3146 [USACO16OPEN] 248 G
    原题链接题解1:\(Code\)#include<bits/stdc++.h>usingnamespacestd;inta[255]={0};intf[255][255]={0};intmain(){intn,ans=0;cin>>n;for(inti=1;i<=n;i++){cin>>a[i];f[i][i]=a[i];an......
  • 《安富莱嵌入式周报》第331期:单片机实现全功能软件无线电,开源电源EEZ升级主控,ARM 汇编
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 目录:1、单片机实现低配版全功能软件无线电,范围0.5-30MHz,支持SSB、AM、FM和CW2、TI整理的ARM汇编用户指南3、ADI差分链路的SPI扩展器LTC4332,支持1200米4、开源串口,SPI,I......
  • CCF模拟_202312-2_因子化简(80%)
    计算机软件能力认证考试系统题目样例输入321558950643221000000000010Data样例输出2238728110000000000思路:这个题主要麻烦的地方应该在于分解成素数n次方相乘的数学思想和大整数的处理。关于素数分解,一个思路是简单粗暴地把小于n的所有素数都给尝试一遍(也......
  • CS231N Assignment3 笔记(更新中)
    在这项作业中,将实现语言网络,并将其应用于COCO数据集上的图像标题。然后将训练生成对抗网络,生成与训练数据集相似的图像。最后,您将学习自我监督学习,自动学习无标签数据集的视觉表示。本作业的目标如下:1.理解并实现RNN和Transformer网络。将它们与CNN网络相结合,为图像添加标......