Socket.D 小场景.消息订阅模式 (v2)
本案以简单的消息订阅模式为例演示:(即等着你给我来信,例如配置服务的变更通知)
1、服务端
//启动服务端
public class ServerApp {
public static void main(String[] args) {
//启动Solon容器(SocketD bean&plugin 由solon容器管理)
Solon.start(ServerApp.class, args, app -> app.enableSocketD(true));
}
}
//定义服务端监听,收集会话
@ServerEndpoint("/")
public class ServerListener extends SimpleListener {
public static Map<String,Session> sessionMap = new ConcurrentHashMap<>();
public static Collection<Session> getOpenSessions() {
return sessionMap.values();
}
public static void broadcast(String text) throws IOException{
for(Session s1 : getOpenSessions()){
s1.send("/demo", new StringEntity(text));
}
}
@Override
public void onOpen(Session session) {
sessionMap.put(session.sessionId(), session);
}
@Override
public void onClose(Session session) {
sessionMap.remove(session.sessionId());
}
}
//在需要的地方,进行广播(例如:配置服务的更新通知)
ServerListener.broadcast("Hello client!");
2、客户端
//启动客户端
public class ClientApp {
public static void main(String[] args) throws Throwable {
SocketD.createClient("sd:tcp://localhost:28080")
.listen(new EventListener().doOnMessage((s, m)->{
System.out.println("客户端:我收到了:" + m);
})).open();
}
}