Listener 的定制应用
这个定制是一个真实的案例:Solon 项目通过 Socket.D 监听器,将消息转换成 Context 并交给 Handler 接口处理,从而实现 Mvc 效果。这也是 Solon Rpc 的实现方案之一。
使用 Socket.D 开发 Rpc 框架,是非常容易的事情。以下可为参考:
public class ToHandlerListener extends SimpleListener {
private static final Logger log = LoggerFactory.getLogger(ToHandlerListener.class);
@Override
public void onMessage(Session session, Message message) throws IOException {
if (Utils.isEmpty(message.event())) {
log.warn("This message is missing route, sid={}", message.sid());
return;
}
try {
SocketdContext ctx = new SocketdContext(session, message);
Solon.app().tryHandle(ctx);
if (ctx.getHandled() || ctx.status() != 404) {
ctx.commit();
}
} catch (Throwable e) {
//context 初始化时,可能会出错
//
log.warn(e.getMessage(), e);
}
}
}