<h1 align="center" style="text-align:center;">
Socket.D
</h1>
<p align="center">
<strong>基于连接和语义消息流的网络应用开发框架</strong>
</p>
<p align="center">
<a href="https://socketd.noear.org/">
<img src="https://img.shields.io/badge/socketd-2.1.1-blue" alt="socketd"/>
</a>
<a target="_blank" href="https://www.python.org/">
<img src="https://img.shields.io/badge/python-3.10-blue" alt="python10" />
</a>
<a href="">
<img src="https://img.shields.io/badge/QQ交流群-870505482-orange" alt="qq"/>
</a>
</p>
<hr />
Socket.D 是一种新的通讯应用协议,也是一个开发框架。可以在客户端和服务端之间“简单”、“快速”、“高质”的流式通讯。
### 体验效果
有用户说:“Socket.D 之于 Socket,尤如 Vue 之于 Js、Mvc 之于 Http”。极大简化了 Socket 的开发体验。
### 主要特性
* 异步通讯,由带语义的事件消息驱动
* 语言无关,使用二进制通信协议(支持 tcp, ws, udp)。支持多语言、多平台
* 背压流控,请求时不让你把服务端发死了
* 断线重连,自动连接恢复
* 多路复用
* 双向通讯,单链接双向互听互发
* 自动分片,数据超出 16Mb,会自动分片、自动重组(udp 除外)
* 扩展定制,可为数据添加 meta 语义标注(就像 http header)
* 接口简单
### 与 http、websocket 的简单对比
| 对比项目 | socket.d | http | websocket(ws) | 备注 |
|-------------|--------------|------|---------------|------------------|
| 发消息(Qos0) | 有 | 无 | 有 | 适合监听埋点,日志上报 |
| 发送并请求(Qos1) | 有 | 有 | 无 | 适合马上答复确认 |
| 发送并订阅(流) | 有 | 无 | 无 | 适合视频播放之类的,分块流式获取 |
| 答复或响应 | 有 | 有 | 无 | |
| 单连接双向通讯 | 有 | 无 | 有(不便) | 双向互发、互听。适合反向调服务 |
| 数据分片 | 有 | / | 无 | 适合大文件上传 |
| 断线自动重连 | 有 | / | 无 | |
| 有元信息或头信息 | 有 | 有 | 无 | |
| 基础传输协议 | tcp, udp, ws | tcp | http | |
### 适用场景
可用于 MSG、RPC、IM、MQ 等一些的场景开发,可替代 Http, Websocket, gRpc 等一些协议。比如移动设备与服务器的连接,比如一些微服务场景等等。
### 简单的协议说明( 详见:[《协议文档》](protocol.md) )
* 连接地址风格
```
sd:tcp://19.10.2.3:9812/path?u=noear&t=1234
sd:udp://19.10.2.3:9812/path?u=noear&t=1234
sd:ws://19.10.2.3:1023/path?u=noear&t=1234
```
* 帧码结构
```
//udp only <2k
[len:int][flag:int][sid:str(<64)][\n][event:str(<512)][\n][metaString:str(<4k)][\n][data:byte(<16m)]
```
* 指令流
| Flag | Server | Client |
|-----------|--------------------------------------|-------------------------------------------------------|
| Unknown | ::close() | ::close() |
| Connect | / | c(Connect)->s::onOpen(),s(Connack?)->c::onOpen() |
| Connack | ->s::onOpen(),s(Connack?)->c | / |
| Ping | / | c(Ping)->s(Pong)->c |
| Pong | ->s(Pong)->c | / |
| Close | s(Close)->c | c(Close)->s |
| Message | s(Message)->c | c(Message)->s |
| Request | s(Request)->c(Reply or ReplyEnd)->s | c(Request)->s(Reply or ReplyEnd)->c |
| Subscribe | s(Subscribe)->c(Reply...ReplyEnd)->s | c(Subscribe)->s(Reply...ReplyEnd)->c |
| Reply | ->s(Reply)->c | ->c(Reply)->s |
| ReplyEnd | ->s(ReplyEnd)->c | ->c(ReplyEnd)->s |
```
//The reply acceptor registration in the channel is removed after the reply is completed
```
### 快速入门与学习
* 学习
请点击:[《快速入门与学习》](_docs/)。Java 之外的语言与平台会尽快跟进(欢迎有兴趣的同学加入社区)
* 规划情况了解
| 语言或平台 | 客户端 | 服务端 | 备注 |
|--------|-----|----|----------------------|
| java | 已完成 | 已完成 | 支持 tcp, udp, ws 通讯架构 |
| js | 开发中 | / | 支持 ws 通讯架构 |
| python | 开发中 | / | 支持 ws 通讯架构 |
| 其它 | 计划中 | 计划中 | |
## 快速入门
使用pip远程安装(暂时没发布)
```shell
pip install socketD
```
或
克隆项目,通过setup.py文件安装到本地
```shell
python setup.py build
python setup.py install
```
或
pip安装到本地
```shell
cd \python\socketd
pip install .
```
快速创建服务器和客户端
```python
async def application():
# 服务端
server: Server = SocketD.create_server(ServerConfig("ws").set_port(9999))
server_session: WebSocketServer = await server.config(idGenerator).listen(
SimpleListenerTest()).start()
# 客户端
client_session: Session = await SocketD.create_client("ws://127.0.0.1:9999") \
.config(idGenerator).open()
start_time = time.monotonic()
for _ in range(100):
await client_session.send("demo", StringEntity("test.png"))
await client_session.send_and_request("demo", StringEntity("test.png"), 100)
await client_session.send_and_subscribe("demo", StringEntity("test.png"), send_and_subscribe_test, 100)
end_time = time.monotonic()
logger.info(f"Coroutine send took {(end_time - start_time) * 1000.0} monotonic to complete.")
await client_session.close()
server_session.close()
await server.stop()
asyncio.run(application())
```
非windows用户可以引入以下依赖,性能提升2倍,asyncio(协程)性能直逼Go
```shell
pip install uvloop
```
```python
import uvloop
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
```
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于"事件"和"语义消息""流"的网络应用协议(在微服务、移动应用、物联网等场景,可替代 http、websocket 等)基于事件,每个消息都可事件路由。所谓语义,通过元信息进行语义描述。流关联性,有相关的消息会串成一个流。语言无关,使用二进制输传数据(支持 tcp, ws, udp)。支持多语言、多平台。断线重连,自动连接恢复。多路复用,一个连接便可允许多个请求和响应消息同时运行。双向通讯,单链接双向互听互发。自动分片,数据超出 16Mb(大小可配置),会自动分片、自动重组(udp 除外)。接口简单,是响应式但用回调接口
资源推荐
资源详情
资源评论
收起资源包目录
基于事件和语义消息流的网络应用协议 (819个子文件)
gradlew.bat 3KB
org.noear.socketd.transport.client.ClientProvider 108B
org.noear.socketd.transport.client.ClientProvider 105B
org.noear.socketd.transport.client.ClientProvider 58B
org.noear.socketd.transport.client.ClientProvider 56B
org.noear.socketd.transport.client.ClientProvider 51B
org.noear.socketd.transport.client.ClientProvider 51B
org.noear.socketd.transport.client.ClientProvider 51B
ISession.cs 3KB
Flags.cs 3KB
IClientSession.cs 2KB
StreamBase.cs 2KB
Asserts.cs 2KB
IChannel.cs 2KB
StreamMangerDefault.cs 2KB
Constants.cs 1KB
IConfig.cs 1KB
IProcessor.cs 877B
IEntity.cs 787B
ServerBase.cs 704B
IFragmentHandler.cs 673B
Frame.cs 669B
IStreamInternal.cs 669B
StreamSubscribe.cs 624B
EntityMetas.cs 611B
IHandshake.cs 603B
StreamRequest.cs 519B
IChannelAssistant.cs 510B
IServer.cs 504B
IMessage.cs 464B
IClientInternal.cs 447B
SocketdAlarmException.cs 446B
IStreamManger.cs 435B
IStream.cs 402B
ICodecReader.cs 398B
IClient.cs 375B
IFragmentAggregator.cs 360B
ICodec.cs 338B
SocketdChannelException.cs 324B
SocketdCodecException.cs 318B
IChannelInternal.cs 318B
SocketdException.cs 308B
IChannelSupporter.cs 284B
ICodecWriter.cs 277B
SocketdSizeLimitException.cs 248B
SocketdTimeoutException.cs 238B
IClientProvider.cs 236B
IServerProvider.cs 234B
IReply.cs 190B
IHandshakeInternal.cs 170B
IHeartbeatHandler.cs 157B
IMessageInternal.cs 153B
SocketdConnectionException.cs 146B
IClientConfigHandler.cs 132B
IServerConfigHandler.cs 132B
IdGenerator.cs 130B
IClientConnector.cs 89B
ClientBase.cs 88B
ClientConfig.cs 81B
ServerConfig.cs 81B
IListener.cs 80B
org.noear.socketd.csproj 364B
.gitignore 470B
.gitignore 225B
.gitignore 6B
channel_default.go 4KB
seesion_default.go 4KB
processor.go 4KB
client_channel.go 3KB
client_connector.go 3KB
server.go 2KB
channel.go 2KB
client_connector.go 2KB
handler_base.go 2KB
server.go 2KB
channel_base.go 2KB
constant.go 2KB
config_base.go 2KB
aggregator_default.go 2KB
client_base.go 2KB
stream_base.go 2KB
config.go 2KB
config.go 1KB
aggregator_tempfile.go 1KB
codec_default.go 1KB
session_base.go 1KB
handshake.go 1KB
channel_assistant.go 1KB
channel_assistant.go 1KB
session.go 1KB
listener.go 1KB
config.go 1KB
listener.go 1KB
socketd.go 1KB
entity.go 1KB
request_stream.go 1KB
session.go 1KB
demo01_test.go 1020B
stream_manger_default.go 896B
stream_internal.go 805B
共 819 条
- 1
- 2
- 3
- 4
- 5
- 6
- 9
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 7524
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 海底捞员工培训——03选用育.pdf
- 华润雪花啤酒(中国)有限公司 -内审及相关人员风险管理与内部控制培训(二).pdf
- 华润雪花啤酒(中国)有限公司 -内审及相关人员风险管理与内部控制培训(一).pdf
- 2025最新防震减灾应知应会知识题库与答案.doc
- 2025最新高级电工证考试题及答案.doc
- 2025最新汉字听写大会竞赛试题题库及答案.pptx
- 2025最新焊工理论知识考试题及答案.doc
- 2025最新基本公共卫生知识竞赛考试题及答案.doc
- 2025最新工程材料学期末考试题及答案.doc
- 2025最新垃圾分类知识竞赛题库及答案.doc
- 2025最新设计心理学题库及答案.doc
- 2025最新体育知识题库与答案.doc
- 2025最新土建质检员考试题及答案.doc
- 2025最新卫生应急知识竞赛题及答案.doc
- 2025最新消防法考试题库及答案.doc
- 2025最新小学生古诗词知识竞赛题(附答案).doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功