Socket.D v2.5.12

Listener 的定制应用

</> markdown

这个定制是一个真实的案例: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);
        }
    }
}