Socket.D v2.5.11

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

</> markdown

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

1、客户端

public class Demo {
    public static void main(String[] args) throws Throwable {
        //::打开客户端会话
        ClientSession clientSession = SocketD.createClient("sd:udp://127.0.0.1:8602/?u=a&p=2")
                .listen(new SimpleListener() {
                    @Override
                    public void onMessage(Session session, Message message) throws IOException {
                        if (message.isRequest()) {
                            //答复
                            session.replyEnd(message, new StringEntity("And you too."));
                        }
                        
                        //使用会话属性,加个计数
                        Integer count = session.attrOrDefault("count", 0);
                        session.attrPut("count", ++count);

                        if (count > 5) {
                            //超过5次后,停止互发
                            return;
                        }

                        //也主动发一个
                        session.send("/demo3", new StringEntity("Hi!"));
                    }
                })
                .open();

        //发送并请求(且,等待答复)
        clientSession.sendAndRequest("/demo", new StringEntity("hello wrold!")).await();
    }
}

2、服务端

public class Demo {
    public static void main(String[] args) throws Throwable {
        //::启动服务端
        SocketD.createServer("sd:udp")
                .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();
    }
}