A Network Protocol Frame
Project description
Netcore
一个用于简化数据传输流程的库。它能解决流传输粘包、数据丢失等问题,支持原格式传输。
Netcore 可使用类 Flask 框架拓展业务,无需写繁琐的条件判断,对项目有良好的可维护性。
from netcore.endpoint import Endpoint, Request
app = Endpoint(...)
@app.route('.path')
def func(req:Request):
data = req.data
req.response('.another_path', 'msg')
app.start()
[TOC]
安装
Netcore 已上传至 PYPI 与 Github,使用以下其一命令即可快速安装。
pip install netcore
pip install git+https://github.com/A03HCY/Netcore.git
你也可以通过 git clone 进行源码安装。
git clone https://github.com/A03HCY/Netcore.git
cd Netcore
python setup.py install
使用
Protocol
快速使用
通过 Protocol 收发数据。
from netcore import protocol as pt
from rich import print
import io
pool = io.BytesIO()
# ==========
data = pt.Protocol(extension='.example')
data.upmeta({
'msg': [1, 2, 3]
})
data.create_stream(pool.write)
# ==========
pool.seek(0)
# ==========
recv = pt.Protocol()
recv.load_stream(pool.read)
# ==========
print('[blue]Extn:', recv.extn)
print('[blue]Json:', recv.json)
'''
Extn: .example
Json:
{'msg': [1, 2, 3]}
'''
Protocol 支持链式调用。
# 发送数据
data = pt.Protocol(extension='.this_is_extn').upmeta({
'msg': [1, 2, 3]
}).create_stream(sender)
# 接收数据
recv = pt.Protocol().load_stream(recver)
详细
Netcore 提供它的核心协议以在某些方面( 如与微控制器通信 )节省宽带。
def __init__(self, meta:bytes=b'', extension:str='', encoding:str='utf-8', buff:int=2048) -> None:...
字段 | 说明 |
---|---|
meta | 包含的数据 |
extension | 标识,如同文件扩展名一样 |
encoding | 编码解码方式 |
buff | 发送数据的缓冲区大小 |
def upmeta(self, data):...
用于更新meta,此处data类型若为内置类型,则接收方收到的数据为原来的类型。
@property
def code(self) -> str:...
此函数会尝试将meta解码成字符串。
@property
def json(self) -> dict:...
此函数会尝试将meta解码成字典。
@property
def pack(self) -> bytes:...
此函数会返回完整的协议数据。
def write(self, data:bytes):...
def read(self, length:int=None) -> bytes:...
def seek(self, location:int):...
用于模拟文件读写。
def load_stream(self, func, from_head:tuple=None):...
此函数会尝试从一个能够接受数据的 func 按照规定好的协议获取数据,并覆盖实例。
def create_stream(self, func):...
此函数会将数据传入 func。
Package
这个类对 Protocol 进行了封装,它支持:
- 检查数据完整性。
- 将多个 Protocol 拆分成小段发送。
- 返回进度信息。
- 自定义错误处理函数。
快速使用
此类通过多线程对数据传输实时监听,因此使用 socket 演示。
from netcore import protocol as pt
from rich import print
import socket
inp = input('mode[s/c]:')
if inp == 's':
print('[blue]Server mode')
sk = socket.socket()
sk.bind(('0.0.0.0', 5555))
sk.listen()
conn, addr = sk.accept()
print('[green]Connected')
pk = pt.Package(sender=conn.send, recver=conn.recv, buff=2048)
pk.start()
while True:
data = pk.recv()
print('Recv:', data)
elif inp == 'c':
print('[blue]Client mode')
sk = socket.socket()
sk.connect(('localhost', 5555))
pk = pt.Package(sender=sk.send, recver=sk.recv, buff=2048)
pk.start()
while True:
msg = input('msg# ')
pk.send(msg)
详细
def __init__(self, sender, recver, buff:int=2048):...
字段 | 说明 |
---|---|
sender | 用于发送数据的函数 |
recver | 用于获取数据的函数 |
buff | 数据拆分的大小 |
def start(self):...
def close(self):...
用于启动或终止服务。
def send(self, data):...
发送数据,data 可以为内置类型或 Protocol。
def recv(self):...
接收数据。
def error(self, func):...
自定义异常处理,func 需要接收一个字符串参数,该字符串用于反应出错位置。
数据 | 含义 |
---|---|
send | 在发送数据时出错 |
recv | 在接收数据时出错 |
两者一般是在连接断开时触发。
Endpoint
使用类似 Flask 的方式对你的业务进行搭建。
快速使用
from netcore import endpoint as ep
from rich import print
import socket
inp = input('mode[s/c]:')
if inp == 's':
sk = socket.socket()
sk.bind(('0.0.0.0', 6666))
sk.listen()
conn, addr = sk.accept()
# ==========
end = ep.Endpoint(conn.send, conn.recv)
@end.route('.say')
def say(data:ep.Request):
print(data.code)
data.response('.res', 'recved')
end.start()
# ==========
conn.close()
sk.close()
elif inp == 'c':
sk = socket.socket()
sk.connect(('127.0.0.1', 6666))
# ==========
pk = ep.Endpoint(sk.send, sk.recv, buff=2048)
@pk.route('.res')
def res(data:ep.Request):
print(data.code)
pk.start(thread=True)
# ==========
while True:
msg = input('> ')
if msg == 'exit': break
pk.send(ep.Protocol(extension='.say', meta=msg.encode('utf-8')))
pk.close()
sk.close()
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file netcore-0.0.1.tar.gz
.
File metadata
- Download URL: netcore-0.0.1.tar.gz
- Upload date:
- Size: 10.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.10.11
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 48c9b73c61ca2becf699ae5c582c196e271433b8516b6cac3cdbd340740f954c |
|
MD5 | 22bf2a09fdb4e7041ab9607c52b42ff7 |
|
BLAKE2b-256 | d3d9055664c0b7c5d15ece28f51c20b3cf85ec45a18f02098d3ad6ead307e0c4 |
File details
Details for the file netcore-0.0.1-py3-none-any.whl
.
File metadata
- Download URL: netcore-0.0.1-py3-none-any.whl
- Upload date:
- Size: 9.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.10.11
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 060f60c16d224f7c33ef8782fc99c69e6be3b9dab9ee72939336e5bb486d66c0 |
|
MD5 | 50ca54d68400f11086059ed9ac1a0376 |
|
BLAKE2b-256 | 566a7115bcc283218aeec1438e1aa07b877eec3080fe9ce856053c4de78b65b6 |