【python】python-socketio+firecamp使用踩坑指南

news2024/11/26 5:31:55

server.py:

import eventlet
import asyncio

eventlet.monkey_patch()

import socketio
import eventlet.wsgi

sio = socketio.Server(async_mode='eventlet', cors_allowed_origins='*')  # 指明在evenlet模式下


@sio.event
def connect(sid, environ):
    print(f"connect, sid={sid}, environ={environ}")

@sio.event
def disconnect(sid):
    print('disconnect ', sid)

@sio.on('hello')
def hello(sid, data):
    print('server receive:', data)
    print("-----")
    sio.emit('world', {'data': 'world' + data})

app = socketio.Middleware(sio)
eventlet.wsgi.server(eventlet.listen(('127.0.0.1', 9000)), app)

client.py

import socketio

sio = socketio.Client()

@sio.on('connect')
def on_connect():
    print("client connect")

@sio.on('world')
def world(data):
    print('client receive:', data)

sio.connect('http://127.0.0.1:9000')
sio.emit("hello", {"data": "hello"})
print('client send hello success')

server端代码运行成功之后,再运行client端代码,通过log可以看两端通信正常;
server

D:\softwsss/demo2/server.py
(5104) wsgi starting up on http://127.0.0.1:9000

client

D:\software_install\Anaconda3\python.exe D:/python/office_txt/axera/demo2/client.py
client connect
client send hello success
client receive: {'data': 'world'}

server端日志更新

(5104) accepted ('127.0.0.1', 5615)
server receive: {'data': 'hello'}

现在我们用接口调试工具firecamp代替客户端对服务端进行请求操作;
出师不利,刚开始连接就遇到了这么一个报错
在这里插入图片描述

detail:

(13392) accepted ('127.0.0.1', 4824)
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)
127.0.0.1 - - [19/Nov/2022 17:25:56] "GET /socket.io/?EIO=3&transport=polling&t=OIFDNAH HTTP/1.1" 400 219 0.001000

在这里插入图片描述

查看下第三方包的安装版本,主要焦点集中在python-engineio python-socketio
pip list

python-engineio                    4.3.4
python-socketio                    5.7.2

官方作者给的各版本对应的关系:

在这里插入图片描述
refs:

https://pypi.org/project/python-socketio/

更新版本:
安装:

pip install python-socketio==4.6.0
python-engineio                    4.3.4
python-socketio                    4.6.0

查询python-engineio所有版本

pip index versions python-engineio --trusted-host pypi.mirrors.ustc.edu.cn

WARNING: pip index is currently an experimental command. It may be removed/changed in a future release without prio
r warning.
python-engineio (4.3.4)
Available versions: 4.3.4, 4.3.3, 4.3.2, 4.3.1, 4.3.0, 4.2.1, 4.2.0, 4.1.0, 4.0.1, 4.0.0, 3.14.2, 3.14.1, 3.14.0, 3
.13.2, 3.13.1, 3.13.0, 3.12.1, 3.12.0, 3.11.2, 3.11.1, 3.11.0, 3.10.0, 3.9.3, 3.9.2, 3.9.1, 3.9.0, 3.8.2.post1, 3.8
.2, 3.8.1, 3.8.0, 3.7.0, 3.6.0, 3.5.2, 3.5.1, 3.5.0, 3.4.4, 3.4.3, 3.4.2, 3.4.1, 3.4.0, 3.3.2, 3.3.1, 3.3.0, 3.2.3,
 3.2.2, 3.2.1, 3.2.0, 3.1.2, 3.1.1, 3.1.0, 3.0.0, 2.3.2, 2.3.1, 2.3.0, 2.2.0, 2.1.1, 2.1.0, 2.0.4, 2.0.3, 2.0.2, 2.
0.1, 2.0.0, 1.7.0, 1.6.1, 1.6.0, 1.5.4, 1.5.3, 1.5.2, 1.5.1, 1.5.0, 1.4.0, 1.3.2, 1.3.1, 1.3.0, 1.2.4, 1.2.3, 1.2.2
, 1.2.1, 1.2.0, 1.1.2, 1.1.1, 1.1.0, 1.0.4, 1.0.3, 1.0.2, 1.0.1, 1.0.0, 0.9.2, 0.9.1, 0.9.0, 0.8.8, 0.8.7, 0.8.6, 0
.8.5, 0.8.4, 0.8.3, 0.8.2, 0.8.1, 0.8.0, 0.7.2, 0.7.1, 0.7.0, 0.6.9, 0.6.8, 0.6.7, 0.6.6, 0.6.5, 0.6.4, 0.6.3, 0.6.
2, 0.6.1, 0.6.0, 0.5.1, 0.5.0, 0.4.0, 0.3.1, 0.3.0, 0.2.0, 0.1.0
  INSTALLED: 4.3.4
  LATEST:    4.3.4

pip install python-engineio==3.14.0

一开始想找3.6.0版本安装,竟然有个报错,至少支持3.13.0,索性就安装3.14.0这个版本了;
安装时的报错:

ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This beh
aviour is the source of the following dependency conflicts.
python-socketio 4.6.0 requires python-engineio>=3.13.0, but you have python-engineio 3.6.0 which is incompatible.
Successfully installed python-engineio-3.6.0

安装成功log:
pip install python-engineio==3.14

Looking in indexes: http://pypi.mirrors.ustc.edu.cn/simple/
Collecting python-engineio==3.14
  Downloading https://mirrors.bfsu.edu.cn/pypi/web/packages/4c/93/0dbe3e3e43a19c9a0279dde66e15889013682f896187ca777
551de8cc7be/python_engineio-3.14.0-py2.py3-none-any.whl (51 kB)
     ---------------------------------------- 51.7/51.7 KB 531.5 kB/s eta 0:00:00
Requirement already satisfied: six>=1.9.0 in d:\software_install\anaconda3\lib\site-packages (from python-engineio=
=3.14) (1.11.0)
Installing collected packages: python-engineio
  Attempting uninstall: python-engineio
    Found existing installation: python-engineio 3.6.0
    Uninstalling python-engineio-3.6.0:
      Successfully uninstalled python-engineio-3.6.0
Successfully installed python-engineio-3.14.0

最终两个包的版本就是:

python-engineio                   3.14.0
python-socketio                    4.6.0

开启服务端,现在开始尝试用firecamp连接 http://127.0.0.1:9000
就可以正常开启了

firecap也可以正常连接了
在这里插入图片描述

此时也可以与服务端进行正常的通信了
在这里插入图片描述
服务端收到了两次客户端发来的data
在这里插入图片描述
server与firecamp通信正常:
在这里插入图片描述

fastapi+python-socketio

# -- coding:utf-8 --

import socketio
from fastapi import FastAPI

sio = socketio.AsyncServer(
    async_mode="asgi", cors_allowed_origins="*", logger=True, engineio_logger=True
)
app = FastAPI(debug=True)
app_socketio = socketio.ASGIApp(sio)
app.mount(path="/", app=app_socketio)


@sio.event
async def connect(sid, environ):
    print('connect ', sid)
    await sio.emit("Server", {'data': "Connect", 'count': 0})


@sio.on('message')
async def my_message(sid, data):
    print('message ', data)
    await sio.emit("message", {'data': "message" + data})


@sio.event
async def disconnect(sid):
    print('disconnect ', sid)


@sio.event
async def error(sid):
    print('error ', sid)


@app.get("/ss")
async def root():
    return {"message": "Hello World"}


if __name__ == '__main__':
    import uvicorn
    import os

    name_app = os.path.splitext(os.path.basename(__file__))[0]
    uvicorn.run(app=f"{name_app}:app", host="127.0.0.1", port=5008, reload=True, debug=True)

firecamp端:
在这里插入图片描述
服务端:

在这里插入图片描述

先mark一下,在这里走了不少的弯路,悟性太差,还需加油~~~~

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

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

相关文章

个人网站如何集成QQ快捷登录功能?

目录 一、网站集成QQ快捷登录的好处 二、网站接入QQ快捷登录具体步骤 (1)登录到QQ互联官网 (2)进行个人开发者认证 (3)创建网站应用 (4)填写网站资料 三、如何在本地开发环境…

ERP原理与应用教程(作业1)

1.请对下图中所述的各管理理念和方法,分别用2-3句话对其进行解释说明。(答案不唯一,可自行补充) MRP(Material Requirements Planning)是物料需求规划的英文缩写。它是一种应用于生产管理的计划系统&#x…

入职字节测试岗外包一个月,我离职了...

有一种打工人的羡慕,叫做“大厂”。真是年少不知大厂香,错把青春插稻秧。但是,在深圳有一群比大厂员工更庞大的群体,他们顶着大厂的“名”,做着大厂的工作,还可以享受大厂的伙食,却没有大厂的“…

多元统计方法众多,分类还是排序?约束排序还是非约束排序?哪种方法或技术更适合我的研究目的或数据?

生态环境领域研究中常常面对众多的不同类型的数据或变量,当要同时分析多个因变量(y)时需要用到多元统计分析(multivariate statistical analysis)。多元统计分析内容丰富,应用广泛,是非常重要和…

【Git】git命令(全)

Git1、本地操作2、版本管理3、远端仓库4、分支管理5、缓存stash6、遗留rebase7、标签管理8、解决冲突9、参考教程10、示例代码1、本地操作 Linux安装git:yum install git查看git版本 git version查看git设置 git config --list设置git属性 git config --global初始…

鲁班软件使用明道云优化项目管理的全过程

一、关于鲁班软件 鲁班软件成立于2001年,是推动中国建筑业走进工程量电算化时代的开拓者;同时给最近很火的元宇宙提供了关键数字工具,推动智慧城市、智慧楼宇、数字中国建设,工具包括鲁班工程管理数字平台和鲁班BIM/CIM开发者平台…

第三章 集成jest做单元测试环境

1 集成jest做单元测试环境 首先附上项目目录的截图 接着就是搭建项目的大体流程: 1 通过yarn init -y生成package.json文件夹,并且在script中添加运行程序的命令代码,如图 2 创建src,reactivity,tests文件夹&#xf…

C语言--模拟实现库函数qsort

什么是qsort qsort是一个库函数,是用来排序的库函数,使用的是快速排序的方法(quicksort)。 qsort的好处在于: 1,现成的 2,可以排序任意类型的数据。 在之前我们已经学过一种排序方法:冒泡排序。排序的原理…

设置CentOS7的时间与网络同步

1.设置时区为北京时间 [rootlocalhost ~]# timedatectl set-timezone Asia/Shanghai 2.查看系统时间 [rootlocalhost ~]# timedatectl Local time: 四 2023-03-02 17:40:41 CST #系统时间 Universal time: 四 2023-03-02 09:40:41 UTC …

安卓APK打包流程浅析

在面试中,大公司会问你......APK打包流程全过程?APK签名在实际业务中能处理什么?APK加固原理是如何实现的,怎么保证安全?APK签名V1,V2,V3的区别于原理,有什么漏洞?这里只讲解打包流程的全过程。…

Phind-面向程序员的AI聊天对话机器人

ChatGPT在国内没开放,很多人注册不了。导致了很多人走illegal渠道获取账号密码。这样是不对的。 今天介绍一款面向程序员的ai聊天机器人Phind,ta目前可以不用注册直接使用、免费、也不用梯子。 (且用且珍惜,不知道之后会不会跟Cop…

Makefile的使用

Makefile的使用 自动化编译脚本,这个东西就是,进行简单的设置,然后实现原码编成为相应程序,简单化自己进行相关操作的过程。不需要一个个自己进行全部进行输入。而且还有许多的简化书写方法。 ​ 这个Makefile的本质为一种脚本语言…

SYSU程设c++(第二周) string、函数重载、constexpr、auto

创建string对象: string s1; // s1 未使用初始化参数,即默认初始化为空字符串 string s2 "c" ; //不是赋值运算,它等价于 string s2("c") ,是初始化 string s3 (5, s); // s4 初始化为 5 个 s; string…

可视化图表之奥妙——百分比堆叠柱状图

百分比堆叠柱状图是属于堆叠柱状图的一种,是指将每个柱子进行分割以显示相同类型下各个数据的占比大小情况。百分比堆叠柱形图上柱子的各个层代表的是该类别数据占该分组总体数据的百分比,但不适用于对比不同分组内同个分类的数据大小或者对比各分组总数…

企业邮箱对企业有哪些好处以及便捷性

企业邮箱拥有更专业的办公功能,更适合职场使用。同时,使用企业邮箱还可以帮助企业“公私分明”。一方面保护了公司信息,另一方面也提高了工作效率。加上公司统一邮箱也有助于提升公司形象。使用企业邮箱除了收发邮件方便外,还可以…

MyBatis——配置文件完成增删改查

1.首先先创建一个新的表,使用下面的sql语句 -- 删除tb_brand表 drop table if exists tb_brand; -- 创建tb_brand表 create table tb_brand (-- id 主键id int primary key auto_increment,-- 品牌名称brand_name varchar(20),-- 企业名称company_name varchar(20…

openpnp - configure - 丢弃(Discard)位置的设置

文章目录openpnp - configure - 丢弃(Discard)位置的设置概述笔记设置丢弃位置吸取元件失败后, 吸嘴一直吸气的处理ENDopenpnp - configure - 丢弃(Discard)位置的设置 概述 测试时, 吸取了一个元件, 吸取成功了, 现在想将这个料丢掉. 点击控制面板-Special页中的Discard不好…

WSN_1 介绍;部分应用介绍

学习自书籍:Fundamentals of Wireless Sensor Networks. WSN 介绍 传感器 从基础角度说,传感器观测采集现实世界的一些数据。 另一个名称是 transducer 换能器,指传感器将一些形式的信号转换为其他形式的信号,如光敏传感器 光…

华为OD机试用Python实现 -【集五福】 |老题且简单

华为OD机试题 最近更新的博客华为 OD 机试 300 题大纲集五福题目描述输入描述输出描述示例一输入输出示例二输入输出代码编写思路Python 代码最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典

进程和线程理论知识

1.进程和线程之间的联系。 进程是程序依次执行的过程,线程是比进程小的执行单位。 一个进程在其执行过程中可以创建多个线程。 多个线程共享进程的堆和方法区内存资源。 进程是OS进行资源分配的基本单位。 线程是OS进行调度的基本单位。 进程和线程是1&#xff1…