# socketd **Repository Path**: jsmth/socketd ## Basic Information - **Project Name**: socketd - **Description**: 基于连接的可扩展消息传输协议 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 117 - **Created**: 2023-11-05 - **Last Updated**: 2023-11-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

SocketD

基于连接的可扩展消息传输协议

Maven Apache 2 jdk-8 jdk-11 jdk-17 jdk-21
gitee star github star



SocketD 是一个基于连接的、可扩展的、消息驱动的传输协议。具有异步,自动分片,背压流控,双向通讯,多路复用,断线重连,支持签权,基于主题消息等特性。 * 具有语言无关性的二进制通信协议(支持 tcp, ws, udp) * 异步非阻塞消息驱动通信 * 可以进行流量控制、自动连接恢复 * 支持双向通信(如:单链接双向 RPC 接口调用) * 更加适合分布式通信场景 * 支持 ssl,支持国密 ssl * 消息有由元信息和数据组成,通过元信息实现可扩展性 * 接口简单 开发时,主要交互只有 2 接口对象(更多可见:[API.md](API.md) ): | 接口 | 描述 | 说明 | |---------------------------|-------|---------------| | listener | 监听器 | (可双向互听) | | session | 会话 | (可双向互发) | | | | | | session::send | 发送 | | | session::sendAndRequest | 发送并请求 | 要求一次答复 | | session::sendAndSubscribe | 发送并订阅 | 答复结束之前,不限答复次数 | | session::reply | 答复 | | | session::replyEnd | 答复结束 | | ### 适用场景: 可用于 MSG、RPC、IM、MQ,等一些的场景开发,可替代 http, websocket, grpc 等一些协议。比如移动设备与服务器的连接,比如一些微服务场景等等。 ### 协议格式: * codec ``` [len:int][flag:int][sid:str][\n][topic:str][\n][metaString:str][\n][data:byte..] ``` * flag | Flag | Server | Client | 备注 | |-----------|------------------------------|------------------------------|--------------| | Unknown | ::close() | ::close() | | | Connect | / | c(Connect)->s | | | Connack | s(Connack),s::c.onOpen()->c | s(Connack)->c::onOpen() | | | Ping | / | c(Ping)->s | | | Pong | s(Pong)->c | / | | | Close | s(Close)->c | c(Close)->s | 用于特殊场景(如:T人) | | Message | s(Message)->c | c(Message)->s | | | Request | s(Request)->c(Reply)->s | c(Request)->s(Reply)->c | | | Subscribe | s(Subscribe)->c(Reply?..)->s | c(Subscribe)->s(Reply?..)->c | | | Reply | s(Reply)->c | c(Reply)->s | | | ReplyEnd | s(ReplyEnd)->c | c(ReplyEnd)->s | 结束答复 | ### 链接示例: * tcp://19.10.2.3:9812/path?u=a&p=2 * udp://19.10.2.3:9812/path?u=a&p=2 * ws://19.10.2.3:1023/path?u=a&p=2 ### 简单演示: * java [java/README.md](java/)