All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hyf.hotrefresh.plugin.arthas.command.ArthasCommandHandler Maven / Gradle / Ivy

package com.hyf.hotrefresh.plugin.arthas.command;

import com.hyf.hotrefresh.client.api.command.AbstractCommandHandler;
import com.hyf.hotrefresh.client.core.client.HotRefreshClient;
import com.hyf.hotrefresh.plugin.arthas.remoting.payload.RpcArthasCommandRequest;

import java.util.HashMap;
import java.util.Map;

public class ArthasCommandHandler extends AbstractCommandHandler {

    private static final HotRefreshClient client = HotRefreshClient.getInstance();

    @Override
    protected String getIdentity() {
        return "arthas";
    }

    @Override
    protected void doHandle(String[] commands) throws Exception {

        RpcArthasCommandRequest request = new RpcArthasCommandRequest();
        Map headers = new HashMap<>();
        headers.put("command", "start");
        request.setHeaders(headers);
        client.sendRequest(request);

        // 客户端逻辑:
        // 用户在当前命令行发送 arthas
        // 本地提交一个请求给服务端,通知开启其本地的telnet
        // 开启失败,则返回错误给命令行
        // 开启成功,本地启动telnet,将当前命令行与telnet对接
        // 命令统一发送到本地的telnet
        // 本地处理该输入和输出,发送对应的command请求给服务端,服务端返回响应给本地的telnet,完成本地调用远程的arthas

        // 服务端逻辑:
        // 客户端发送开启telnet的请求,服务端校验是否已开启过,维护之前的状态,方便关闭的时候校验
        // 将请求和响应对接到服务端的telnet
        // 通过arthas的Bootstrap开启本地的telnet,将arthas的开启操作作为响应返回
        // 本地telnet接受响应进行命令操作,发送请求到服务端telnet
        // 服务端telnet接受命令执行后,将输出发送到响应,返回给客户端
        // TODO 长连接问题怎么处理?
        //  服务端主动发送请求(不太现实,服务端找不到本地客户端ip)?
        //  还是说放到下一次响应中返回,客户端心跳请求
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy