游戏服务器框架之跨服(三)

跨服回调

回调设计是跨服基础的一个设计难点。类似于JavaScript的Ajax请求,我们希望在向跨服发送请求,拿到服务器的返回结果后能够执行一些回调动作。

如果使用Rpc框架,那么回调API看起来就是这样子的:

public Message sendData(Message request) {

}

不管请求方是否需要回调,都是需要通过请求方发送一条消息到服务接收方。为了能重用协议,我们就只定义一条消息类型用来处理需要回调的业务。那么问题来了,需要回调的跨服请求可能很多,怎么来兼容多种情况呢。

我们可以直接使用子类型来定义种类,而把请求的参数统一封装成一个map参数。请求与响应协议体如下:

/**
 * 跨服回调请求方
 */
@MessageMeta(module = Modules.CROSS, cmd = CrossCommands.G2F_CALL_BACK)
public class G2FCallBack extends Message {

    private int index;

    /**
     * 子类型 {@link com.kingston.jforgame.server.cross.demo.CrossDemoGameService}
     */
    private int command;

    private transient Map params = new HashMap<>();

    private String data;
    /**
     * 响应类型:{@link CallbackKinds#RPC_ASYNC}
     */
    private int rpc;

    pub

你可能感兴趣的:(从零开始搭建游戏服务器框架,java,手游服务端,java,游戏服务器,跨服,回调)