-
Notifications
You must be signed in to change notification settings - Fork 20
Open
Description
这是前段和后端建立连接的websocket过程:
File configFile = new File("config/kubeconfig");
final String configYAML;
configYAML = String.join("\n",Files.readAllLines(configFile.toPath()));
Config kubernetesConfig = Config.fromKubeconfig(configYAML);
kubernetesConfig.setTrustCerts(true);
String urlStr = "https://127.0.0.1/api/v1/namespaces/namespace1/pods/pod1/exec?container=container1&stdin=true&stdout=true&stderr=true&tty=true&command=sh&pretty=true&follow=true";
URL url = new URL(urlStr);
clientWebSocketListener = initServerWebSocket(url, kubernetesConfig);
clientWebSocketListener.setSession(session);
@OnMessage
public void onMessage(Session session, byte[] messages) throws UnsupportedEncodingException {
if (Objects.isNull(session)) {
return;
}
String sessionId = session.getId();
WebsocketMapping websocketMapping = clients.get(sessionId);
ClientWebSocketListener listener = websocketMapping.getListener();
try {
// 向apiServer发送消息
listener.waitUntilReady(1);
listener.send(message.getBytes(), message.length);
} catch (IOException | InterruptedException ie) {
// 通知发送方
session.getAsyncRemote().sendText("向apiServer发送消息失败!失败消息内容: " + message);
}
}
private static ClientWebSocketListener initServerWebSocket(URL url, Config config) {
OkHttpClient client = HttpClientUtils.createHttpClient(config);
final ClientWebSocketListener serverWebSocketListener = new ClientWebSocketListener();
final Request.Builder request = new Request.Builder().url(url).get();
final OkHttpClient clone = client.newBuilder().readTimeout(0, TimeUnit.MILLISECONDS).build();
clone.newWebSocket(request.build(), serverWebSocketListener);
return serverWebSocketListener;
}这是和apiserver建立的websocket的回复数据:
@Override
public void onMessage(WebSocket webSocket, ByteString bytes) {
readyLatch.countDown();
this.getSession().getAsyncRemote().sendBinary(ByteBuffer.wrap(bytes.toByteArray()));
}
@Override
public void onMessage(WebSocket webSocket, String text) {
readyLatch.countDown();
this.getSession().getAsyncRemote().sendText(text);
}现在的问题就是和apiserver能够建立连接,而且在onopen的时候apiserver成功的返回了terminal的$d的开头,但是之后再向apiserver发送消息apiserver都没有回应,请问一下是需要进行什么转换吗,还是我少了一些步骤?
Metadata
Metadata
Assignees
Labels
No labels