Socket-d

Latest version: v2.4.10.7

Safety actively analyzes 638396 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 3 of 9

2.3.11

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


javascript 适配更新:


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


变更示例:

安全退出集群机制


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

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

//正试关闭
session.close();

2.3.10

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


javascript 适配更新:


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


变更示例:

安全退出集群机制


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

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

//正试关闭
session.close();

2.3.9

java 适配更新:
* 无更新


javascript 适配更新:


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

变更示例:

for Node.js demo

* for package.json

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(这是之前支持的)


javascript
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(这是刚刚支持的)


javascript
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.8

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


javascript 适配更新:

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

变更示例:

java
//如果不能连接正常返回(由心跳尝试不断连接)
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();


java
//doOf 返回自己
new PathListener().doOf("/admin", new EventListener().doOnOpen(s->{}));

//of 返回 EventListener
new PathListener().of("/admin").doOnOpen(s->{});

2.3.7

java 适配更新:
* 添加 Client::openOrThow() 方法,原 open() 不再出异常
* 调整 ClientChannel 内部处理,支持首次连接失败后仍可用
* 简化 ClientBase::open() 处理


javascript 适配更新:

* 添加 Client::openOrThow() 方法,原 open() 不再出异常
* 调整 ClientChannel 内部处理,支持首次连接失败后仍可用
* 简化 ClientBase::open() 处理

变更示例:

java
//如果不能连接正常返回(由心跳尝试不断连接)
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();

2.3.6

java 适配更新:
* 添加 Session::liveTime 接口
* 添加 Entity.of 快捷方法


javascript 适配更新:

* 添加 Session::liveTime 接口

变更示例:

java
//Entity.of 快捷实例构建
session.send("/demo", Entity.of("hi!"));

//最后活动时间
session.liveTime();

Page 3 of 9

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.