Socket.D v2.5.12

应用 - 双向互发 + 会话属性

</> markdown

只要建立会话后,就可以自由的相互监听、相互发消息。这是非常重要的基础,很多场景会用到。

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();
    }
}