基于python的socketio通信,将获取的内容导入TDengine3.0数据库中
基于windows系统的环境准备
- pyaharm2022、anaconda(新建python版本为3.7.4的虚拟环境)
- 新建python版本为3.7.4的虚拟环境
// 新建环境
conda create -n py3.7.4 python=3.7.4
// 删除环境
conda remove -n 需要删除的环境名 --all
//进入环境
conda activate py3.7.4
//退出环境
conda deactivare
新建环境里的安装包列表
3. 安装包下载
- socketio所需安装包
// 未安装requests,会报错requests package is not installed -- cannot send HTTP requests!
pip install requests==2.28.1
pip install python-socketio==4.6.0
pip install python-engineio==3.14.2
pip install websocket==0.2.1
pip install websocket-client==0.57.0
注意:
- 安装python-socketio==4.6.0时间,环境会同时安装python-socketio-4.6.0和python-engineio-4.3.4和six-1.16.0,因为python-engineio-4.3.4版本过高,会报错socketio.exceptions.ConnectionError: Unexpected response from server
- 未安装websocket-0.2.1、websocket-client-0.57.0会报错AttributeError: module ‘websocket’ has no attribute ‘WebSocketException’
- 只安装websocket-0.2.1,会报错AttributeError: module ‘websocket’ has no attribute ‘WebSocketException’
- 同时安装websocket-0.2.1、websocket-client-0.57.0,是为了触发服务端的自定义socketio事件
- 操作TDengine所需安装包
pip install taospy==2.6.9
安装完上述的安装包列表
python的socketio客户端全部代码client01.py
import socketio
// import json 是为了处理从服务端接收的json数据
import json
import datetime
from taosrest import connect, TaosRestConnection, TaosRestCursor
sio = socketio.Client()
conn: TaosRestConnection = connect(url="http://192.168.1.104:6041",
user="root",
password="taosdata",
timeout=30)
// 系统内置的socketio事件connect、disconnect
@sio.on('connect')
def on_connect():
print("client connect")
@sio.on('disconnect')
def on_disconnect():
print('disconnected from server')
//服务端自定义的socketio事件statistics_packet
// 实时推送采集报文信息
@sio.on('statistics_packet')
def statistics_packet(data):
temp = json.dumps(data)
responsejson = json.loads(temp)
#********************** safe.statistics_packet *********************************
#print(responsejson)
# 已监测报文数量
packetcount = responsejson.get("packetCount")
# 已预警报文数量
attackcount = responsejson.get("attackCount")
# 每秒报文数量
currentpacketcount = responsejson.get("currentPacketCount")
# 监测资产数量
devicecount = responsejson.get("deviceCount")
# 预警资产(参与过攻击与被攻击的设备)数量
attackeddevicecount = responsejson.get("attackedDeviceCount")
# insert data
cursor: TaosRestCursor = conn.cursor()
now = datetime.datetime.now()
cursor.execute("insert into safe.statistics_packet values ('%s', '%s', '%s', '%s', '%s', '%s')" % (now, packetcount, attackcount, currentpacketcount,devicecount,attackeddevicecount))
return responsejson
// 客户端连接服务端
sio.connect('http://ip:port')
sio.emit("hello", {"data": "hello"})
print('client send hello success')
python代码从windows系统移植到centos7系统
- 创建⼀个独⽴的Python环境
参考文章:创建⼀个独⽴的Python环境
- virtualenv的安装
pip install virtualenv
⾸先系统中某个路径下创建⼀个⽂件夹,⽐如我创建了⼀个叫做venv的⽂件夹,⽐如我⽬前的路 径为 /test/venv,如果你是windows系统,那么你的路径⽐如说是 D:\envs 然后通过终端进⼊到这个⽂件夹⾥⾯,然后执⾏下⾯的指令
- 创建虚拟环境
// 系统得有python3.7.4编译器,否则会报错,其余版本的python也是同理
virtualenv envsafe --python=python3.7.4
- 使用虚拟环境
// linux或者mac
[root@node01 venv]# source /test/venv/envsafe/bin/activate
// windows
envsafe\Scripts\activate
- 退出虚拟环境
// Windows (记不住单词没关系 按Tab键是可以⾃动补全的)
envsafe\Scripts\deactivate.bat
或者进⼊envsafe下⾯的Scripts⽂件夹下⾯,执⾏deactivate指令就可以了
// linux或者mac
任意⽬录下执⾏ deactivate指令
执⾏完上⾯的指令之后,在venv⽂件夹中会出现⼀个叫做envsafe 的⽂件夹,这个就是虚拟环境 所在的⽬录了,如果以后不想⽤这个虚拟环境了,直接删除这个myenv⽂件夹就⾏了,还可以创建多个 虚拟环境,起名字别冲突就可以了。
2. 剩下的安装步骤和windows类似
centos7后台挂起python脚本
nohup python /test/client01.py >/dev/null 2>/dev/null &
centos7杀死python脚本进程
// 查找client01.py脚本的PID
ps -ef | grep client01.py
// 杀死python脚本的PID或者父PID
kill -9 108974
输入查找client01.py脚本的PID命令之后,如图所示