应用 - 双向互发 + 会话属性
只要建立会话后,就可以自由的相互监听、相互发消息。这是非常重要的基础,很多场景会用到。
1、客户端
//::打开客户端会话
const clientSession = await SocketD.createClient("sd:ws://127.0.0.1:8602/?u=a&p=2")
.listen(SocketD.newEventListener().doOnMessage((Session session, Message message)=>{
if (message.isRequest()) {
//答复
session.replyEnd(message, SocketD.newEntity("And you too."));
}
//使用会话属性,加个计数
let count = session.attrOrDefault("count", 0);
session.attrPut("count", ++count);
if (count > 5) {
//超过5次后,停止互发
return;
}
//也主动发一个
session.send("/demo3", SocketD.newEntity("Hi!"));
}
})
.open();
//发送并请求(且,等待答复)
clientSession.sendAndRequest("/demo", SocketD.newEntity("hello wrold!")).thenReply(reply=>{
//...
});
2、服务端(以 java 为例)
public class Demo {
public static void main(String[] args) throws Throwable {
//::启动服务端
SocketD.createServer("sd:ws")
.config(c -> c.port(8602))
.listen(new SimpleListener() {
@Override
public void onMessage(Session session, Message message) throws IOException {
if (message.isRequest() || message.isSubscribe()) {
//答复
session.replyEnd(message, new StringEntity("Server receive: " + message.entity()));
}
//然后,也主动发送一个
session.send("/demo2", new StringEntity("Hi!"));
}
})
.start();
}
}