42 Star 420 Fork 98

GVPnoear / socket.d

2024-05-12 22:24
15535 noear admin 1683858335 西东

java 适配更新:

  • 添加 Session::attrDel 接口
  • 添加 ListenerWrapper 类,方便应用定制
  • 优化 java-websocket 适配,增加 header 转移
  • 优化 spring-websocket 适配,增加 header 转移
  • 优化 java-websocket 适配,增加 setReuseAddr(true) 配置

javascript 适配更新:

  • 添加 提供者手动注册接口
  • 优化 SocketD.newEntity 与小程序的兼容性(小程不支持 File、Blob 类型)

python 适配更新:

  • 修复 stream.on_reply 非异步调用出错的问题
  • 优化 流的超时处理
  • 调整 语言版本需求改为 3.10
最后提交信息为: 2.4.16
2024-05-12 10:41
15535 noear admin 1683858335 西东

java 适配更新:

  • 添加 Session::attrDel 接口
  • 优化 java-websocket 适配,增加 header 转移
  • 优化 spring-websocket 适配,增加 header 转移
  • 优化 java-websocket 适配,增加 setReuseAddr(true) 配置

javascript 适配更新:

  • 添加 提供者手动注册接口
  • 优化 SocketD.newEntity 与小程序的兼容性(小程不支持 File、Blob 类型)

python 适配更新:

  • 修复 stream.on_reply 非异步调用出错的问题
  • 优化 流的超时处理
  • 调整 语言版本需求改为 3.10
最后提交信息为: 2.4.15
2024-04-29 18:15
15535 noear admin 1683858335 西东

java 适配更新:

javascript 适配更新:

python 适配更新:

  • 优化 协议跨语言编码解兼容
  • 优化 异步栈的日志记录
最后提交信息为: 2.4.14
2024-04-29 09:13
15535 noear admin 1683858335 西东

java 适配更新:

javascript 适配更新:

python 适配更新:

  • 优化 协议跨语言编码解兼容
  • 优化 异步栈的日志记录
最后提交信息为: 2.4.13
2024-04-25 14:03
15535 noear admin 1683858335 西东

java 适配更新:

  • 调整 Processor:onError 添加 try-catch 处理
  • 优化 socketd-transport-netty udp 的连接状态管理

javascript 适配更新:

  • 调整 Processor:onError 添加 try-catch 处理

pythone 适配更新:

  • 调整 Processor:onError 添加 try-catch 处理
最后提交信息为: 2.4.12
2024-04-23 11:12
15535 noear admin 1683858335 西东

java 适配更新:

  • 调整 本端关闭时,也触发本端的 onClose 事件
  • 禁止 ws 客户端连接 sd:ws 服务(避免因为 ws 心跳,又不会触发空闲超时)
  • 优化 socketd-transport-java-kcp 服务端停止处理(添加延时,确保指令发送完成)
  • 优化 socketd-transport-java-tcp 在某些操作系统下空跑可能 cpu 过高的问题

javascript 适配更新:

  • 调整 本端关闭时,也触发本端的 onClose 事件
  • 禁止 ws 客户端连接 sd:ws 服务(避免因为 ws 心跳,又不会触发空闲超时)

pythone 适配更新:

  • 调整 本端关闭时,也触发本端的 onClose 事件
  • 禁止 ws 客户端连接 sd:ws 服务(避免因为 ws 心跳,又不会触发空闲超时)
最后提交信息为: README
2024-04-12 22:13
15535 noear admin 1683858335 西东

java 适配更新:

  • 添加 preclose 和 prestop(简化二段式停止操作)
  • 调整 通道关闭打印条件(避免多次打印)

javascript 适配更新:

  • 添加 preclose 和 prestop(简化二段式停止操作)
  • 调整 通道关闭打印条件(避免多次打印)
2024-03-29 14:27
15535 noear admin 1683858335 西东

java 适配更新:

  • 添加 CLOSE2003_DISCONNECTION 关闭码
  • 添加 Pressure 帧类型(预留做背压控制)
  • 修复 当使用二段式关闭时,可能出现无法重连的问题(2.3.10 后出现的)

javascript 适配更新:

  • 添加 CLOSE2003_DISCONNECTION 关闭码
  • 添加 Pressure 帧类型(预留做背压控制)
  • 修复 当使用二段式关闭时,可能出现无法重连的问题(2.3.10 后出现的)
最后提交信息为: 2.4.9
2024-03-28 19:57
15535 noear admin 1683858335 西东

java 适配更新:

  • 添加 X-Hash 元信息支持
  • smartsocket 升为 1.5.43

javascript 适配更新:

  • 添加 X-Hash 元信息支持
最后提交信息为: 2.4.8
2024-03-21 13:00
15535 noear admin 1683858335 西东

java 适配更新:

  • 添加 spi 手动注册方式
  • 调整 读写缓冲大小配置默认 512 改为 4k(主要用在 bio 跟 aio 上)
  • 调整 smartsocket 附件的处理(简化)
  • 调整 client:open 改为无异常模式
  • 调整 Config::isSequenceSend 更名为 isSerialSend
  • 调整 Config::getIdGenerator 改为 genId
  • 调整 HandshakeDefault path 为空时,默认为 /
  • 调整 把发送锁改为配置决伫的固定模式
  • 简化 心跳异常日志

javascript 适配更新:

  • 添加 Entity::metaAsDouble,metaAsLong,保持与 java 一至(方便文档统一)
  • 调整 Config::getIdGenerator 改为 genId
  • 调整 HandshakeDefault path 为空时,默认为 /
  • 调整 ByteBuffer::getBytes 为异步模式,保持与 BlobBuffer 相同体验
  • 修复 StrUtil::parseUri 没有 ? 时出错的问题
  • 简化 心跳异常日志
最后提交信息为: 2.4.7
2024-02-29 17:37
15535 noear admin 1683858335 西东

java 适配更新:

  • 优化 Stream 异常传导性
  • 添加 Entity:delMeta 删除元信息接口

javascript 适配更新:

  • 完善 BrokerListener 实现(node.js 支持 broker 开发了)
  • 添加 Entity:delMeta 删除元信息接口
最后提交信息为: 2.4.5
2024-02-27 13:53
15535 noear admin 1683858335 西东

java 适配更新:

  • 添加 BrokerListener 异常转发支持

javascript 适配更新:

  • 完成 BrokerListener 开发(node.js 支持 broker 开发了)
最后提交信息为: 2.4.4
2024-02-23 15:21
15535 noear admin 1683858335 西东

java 适配更新:

  • 优化 EntityDefault:metaPut 当 val=null时,视为删除
  • 优化 ClientChannel:heartbeatHandle 添加 isClosing 的判断
  • 优化 ClientChannel:heartbeatHandle 处理,增加内部会话关闭时,同步到外层
  • 优化 ChannelDefault 内部的通道关闭改为延时100ms关,避免 sendClose 时通道坏掉
  • 调整 BrokerListener 的能力方法,都改为公有
  • 调整 心跳日志级别改为 debug
  • 添加 BrokerListenerBase:getPlayerAny(name) 接口
  • smart-socket 升为 1.5.42

javascript 适配更新:

  • 优化 EntityDefault:metaPut 当 val=null时,视为删除
  • 优化 ClientChannel:heartbeatHandle 添加 isClosing 的判断
  • 优化 ClientChannel:heartbeatHandle 处理,增加内部会话关闭时,同步到外层
  • 优化 ChannelDefault 内部的通道关闭改为延时100ms关,避免 sendClose 时通道坏掉
  • 优化 isClosedAndEnd 的判断条件,去掉 CLOSE1000_PROTOCOL_CLOSE_STARTING
最后提交信息为: 2.4.3
2024-02-20 11:40
15535 noear admin 1683858335 西东

java 适配更新:

  • 添加 连接时 Handshake 元信息交互机制

javascript 适配更新:

  • 添加 连接时 Handshake 元信息交互机制

应用示例:

SocketD.createServer("sd:ws")
    .listen(new EventListener()
        .doOnOpen(s->{s.handshake().outMeta("test","1")})
    )
    .open();
最后提交信息为: 2.4.2
2024-02-19 21:20
15535 noear admin 1683858335 西东

java 适配更新:

  • 添加 ClientConnectHandler 接口,提供连接时的拦截处理

javascript 适配更新:

  • 添加 ClientConnectHandler 接口,提供连接时的拦截处理

应用示例:

SocketD.createClient("sd:ws://127.0.0.1")
    .config(c => c
        .heartbeatInterval(1000*5)
        .fragmentSize(1024 * 1024)
        .metaPut("test","1"))
    .connectHandler(c=> {
        console.log("connect begin...");
        return c.connect();
    })
    .open();
最后提交信息为: 2.4.1
2024-02-08 11:47
15535 noear admin 1683858335 西东

java 适配更新:

  • 添加 LoadBalancer 集群负载均衡工具
  • 添加 BrokerListener 新的转发路由机制,固定给某个接收者(name!)
  • 调整 Socketd 开头的异常类改为 SocketD 开头(与 python 统一)
  • 调整 几个配置名
接配置名 新配置名 备注
maxThreads exchangeThreads 交换线程数,用于消息接收等(原来的名字,语义不明)
coreThreads codecThreads 解码线程数,用于编解码等(原来的名字,语义不明)
/ ioThreads Io线程数,用于连接等
sequenceMode sequenceSend 有锁顺序发送(原来的名字,语义不明)
/ nolockSend 无锁发送

备注:关于线程配置,在不同的适配时使用情况不同。其中 exchange 支持直接配置线程池(以支持 jdk21 的虚拟线程池)

javascript 适配更新:

  • 添加 LoadBalancer 集群负载均衡工具
  • 调整 Socketd 开头的异常类改为 SocketD 开头(与 python 统一)
  • 调整 几个配置名
接配置名 新配置名 备注
maxThreads exchangeThreads 交换线程数,用于消息接收等(原来的名字,语义不明)
coreThreads codecThreads 解码线程数,用于编解码等(原来的名字,语义不明)
/ ioThreads Io线程数,用于连接等

备注:关于线程配置在 js 里,基本没用到

最后提交信息为: 2.4.0
2024-02-06 10:36
15535 noear admin 1683858335 西东

java 适配更新:

  • 添加 Session::closeStarting 接口(为安全退出集群提供机制)
  • 添加 Session::isClosing 接口(为安全退出集群提供机制)
  • 添加 关闭协议帧对 code 的支持(为安全退出集群提供机制)
  • 修复 MappedByteBuffer 不能解除映射的问题(可以改善内存与删除控制)
  • 修复 Entity.of(String) 会出错的问题
  • 修复 使用临时文件分片处理失效的问题
  • 调整 轮询最大值改为 999_999
  • 调整 消息发送锁的策略改为可配置(根据 sequenceMode 使用公平锁或非公平锁)
  • 调整 smartsocket,websocket,netty 适配的服务端线程数改由配置决定

javascript 适配更新:

  • 优化 StrUtil 关于字符转换的处理(优化使用 TextDecoder)
  • 添加 Session::closeStarting 接口(为安全退出集群提供机制)
  • 添加 Session::isClosing 接口(为安全退出集群提供机制)
  • 添加 关闭协议帧对 code 的支持(为安全退出集群提供机制)

变更示例:

安全退出集群机制

//通知要开始关闭了(集群相关方不会再发消息进来)
session.closeStarting();

//等5秒,结束正在处理的消息
sleep(5_000)

//正试关闭
session.close();
最后提交信息为: 2.3.11
2024-02-04 22:44
15535 noear admin 1683858335 西东

java 适配更新:

  • 添加 Session::closeStarting 接口(为安全退出集群提供机制)
  • 添加 关闭协议帧对 code 的支持(为安全退出集群提供机制)
  • 修复 MappedByteBuffer 不能解除映射的问题(可以改善内存与删除控制)
  • 修复 Entity.of(String) 会出错的问题
  • 修复 使用临时文件分片处理失效的问题
  • 调整 轮询最大值改为 999_999
  • 调整 消息发送锁的策略改为可配置(根据 sequenceMode 使用公平锁或非公平锁)
  • 调整 smartsocket,websocket,netty 适配的服务端线程数改由配置决定

javascript 适配更新:

  • 优化 StrUtil 关于字符转换的处理(优化使用 TextDecoder)
  • 添加 Session::closeStarting 接口
  • 添加 关闭协议帧对 code 的支持

变更示例:

安全退出集群机制

//通知要开始关闭了(集群相关方不会再发消息进来)
session.closeStarting();

//等5秒,结束正在处理的消息
sleep(5_000)

//正试关闭
session.close();
最后提交信息为: 2.3.10
2024-01-30 12:41
15535 noear admin 1683858335 西东

java 适配更新:

  • 无更新

javascript 适配更新:

  • 完成 for Node.js server 实现
  • 添加 Session::remoteAddress,localAddress 方法

变更示例:

for Node.js demo

  • for package.json
{
  "name": "demo",
  "description": "socket.d for node.js demo",
  "author": "noear",
  "dependencies": {
    "@noear/socket.d": "2.3.9",
    "ws": "^8.16.0"
  }
}
  • for ClientTest.js(这是之前支持的)
const {SocketD}  = require('@noear/socket.d');

async function main() {
    let clientSession = await SocketD.createClient('sd:ws://127.0.0.1:8602/?u=a&p=2')
        .config(c => c.fragmentSize(1024 * 1024))
        .listen(SocketD.newEventListener().doOnMessage((s, m) => {
            console.log('收到推送', m.dataAsString());
        }))
        .open();
    clientSession.sendAndRequest("/demo", SocketD.newEntity('hello')).thenReply(reply => {
        console.log('reply', reply);
    });
}

main();
  • for ServerTest.js(这是刚刚支持的)
const {SocketD}  = require('@noear/socket.d');

function main(){
   let server = SocketD.createServer("sd:ws")
       .config(c=>c.port(8602).fragmentSize(1024 * 1024))
       .listen(buildListener())
       .start();
}

function buildListener() {
    return SocketD.newEventListener()
        .doOnOpen(s => {
            console.info("onOpen: " + s.sessionId());
        }).doOnMessage((s, m) => {
            console.info("onMessage: " + m);
        }).doOn("/demo", (s, m) => {
            if (m.isRequest()) {
                s.reply(m, SocketD.newEntity("me to!"));
            }

            if (m.isSubscribe()) {
                let size = m.rangeSize();
                for (let i = 1; i <= size; i++ ) {
                    s.reply(m, SocketD.newEntity("me to-" + i));
                }
                s.replyEnd(m, SocketD.newEntity("welcome to my home!"));
            }
        }).doOn("/upload", (s, m) => {
            if (m.isRequest()) {
                let fileName = m.meta(SocketD.EntityMetas.META_DATA_DISPOSITION_FILENAME);
                if (fileName) {
                    s.reply(m, SocketD.newEntity("no file! size: " + m.dataSize()));
                } else {
                    s.reply(m, SocketD.newEntity("file received: " + fileName + ", size: " + m.dataSize()));
                }
            }
        }).doOn("/download", (s, m) => {
            if (m.isRequest()) {
                let fileEntity = SocketD.newEntity("...");//todo://SocketD.newEntity(fs.readFileSync("/Users/noear/Movies/snack3-rce-poc.mov"));
                s.reply(m, fileEntity);
            }
        }).doOn("/push", (s, m) => {
            if (s.attrHas("push")) {
                return;
            }

            s.attrPut("push", "1");

            for (let i = 0; i++; i < 100) {
                if (s.attrHas("push") == false) {
                    break;
                }

                s.send("/push", SocketD.newEntity("push test"));
                //todo:sleep
            }
        }).doOn("/unpush", (s, m) => {
            s.attrMap().remove("push");
        })
        .doOnClose(s => {
            console.info("onClose: " + s.sessionId());
        }).doOnError((s, err) => {
            console.warn("onError: " + s.sessionId());
        });
}

main();
最后提交信息为: 2.3.9
2024-01-23 17:32
15535 noear admin 1683858335 西东

java 适配更新:

  • 添加 CLOSE28_OPEN_FAIL 关闭码,优化关闭处理
  • 调整 SocketD.createXxx 的异常提示,带上协议架构信息
  • 调整 PathListener::of 更名为 doOf,并添加 of 函数(应用不同)

javascript 适配更新:

  • 添加 CLOSE28_OPEN_FAIL 关闭码,优化关闭处理
  • 调整 SocketD.createXxx 的异常提示,带上协议架构信息
  • 调整 PathListener::of 更名为 doOf,并添加 of 函数(应用不同)

变更示例:

//如果不能连接正常返回(由心跳尝试不断连接)
let session = SocketD.createClient("sd:tcp://127.0.0.1:8602/?token=1b0VsGusEkddgr3d")
        .open();

//如果不能连接则异常
let session = SocketD.createClient("sd:tcp://127.0.0.1:8602/?token=1b0VsGusEkddgr3d")
        .openOrThow();
//doOf 返回自己
new PathListener().doOf("/admin", new EventListener().doOnOpen(s->{}));

//of 返回 EventListener
new PathListener().of("/admin").doOnOpen(s->{});
最后提交信息为: 2.3.8
Java
1
https://gitee.com/noear/socket.d.git
git@gitee.com:noear/socket.d.git
noear
socket.d
socket.d

搜索帮助