使用场景
类型
- 接收第三方提供的chunked接口
- 接收第三方提供的websocket接
- 接收第三方提供的http接口
解决的问题
- 实时转发给客户端(实时性)
- 服务器协议中转(统一性)
用途
代码实现(服务端选其一即可)
springboot服务端
<dependency>
<groupId>org.asynchttpclient</groupId>
<artifactId>async-http-client</artifactId>
<version>2.12.3</version>
</dependency>
<dependency>
<groupId>org.java-websocket</groupId>
<artifactId>Java-WebSocket</artifactId>
<version>1.5.2</version>
</dependency>
import org.asynchttpclient.*;
import static org.asynchttpclient.Dsl.*;
public class TestChunkedReceiver {
public static void main(String[] args) {
String url = "http://127.0.0.1:7001/chunked/chunked-test";
AsyncHttpClient httpClient = Dsl.asyncHttpClient();
String jsonBody = "{\"name\": \"name-test\"}";
Request request = post(url)
.setHeader("Content-Type", "application/json")
.setBody(jsonBody)
.build();
httpClient.executeRequest(request, new StreamDataHandler()).get();
}
private static class StreamDataHandler extends org.asynchttpclient.AsyncCompletionHandler<Response> {
@Override
public State onBodyPartReceived(HttpResponseBodyPart bodyPart) {
byte[] responseData = bodyPart.getBodyPartBytes();
String responseStr = new String(responseData);
System.out.println("每个chunked接收的数据=>" + responseStr);
...
return State.CONTINUE;
}
@Override
public Response onCompleted(Response response) {
return response;
}
}
}
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class TestWebsocketReceiver {
public static void main(String[] args) {
URI url = new URI("ws://127.0.0.1:70001/websocket/wesocket-test");
WebSocketClient client = new WebSocketClient(url) {
@Override
public void onOpen(ServerHandshake serverHandshake) {
log.info("[websocket] 连接成功");
}
@Override
public void onMessage(String message) {
log.info("[websocket] 收到消息={}", message);
}
@Override
public void onClose(int code, String reason, boolean remote) {
log.info("[websocket] 退出连接,{}->{}->{}",code, reason, remote);
}
@Override
public void onError(Exception ex) {
log.info("[websocket] 连接错误={}", ex.getMessage());
}
};
client.connectBlocking();
...
}
}
EGG服务端
const url = 'http://127.0.0.1:7001/chunked/chunked-test';
ajax(url, 'POST', { usernaem: 'wkj'},{
'Content-Type': 'application/json',
'Transfer-Encoding': 'chunked'
},{
enableChunked: true,
chunkReceived(data) {
const resData = typeof data === 'string' ? data : new TextDecoder().decode(data);
console.log("chunk接收的数据=>" + resData);
}
}
).then(() => {
console.log("chunked接收数据完毕");
});
const wsUrl = 'ws://127.0.0.1:7001/websocket/websocket-test';
const websocketClient: any = new WebSocketClient(wsUrl);
websocketClient.on('open', (event) => {
console.log('连接上了', event);
});
websocketClient.on('message', (data, err) => {
console.log('收到的数据', { data, err });
});
ws.on('close', () => {
console.log('连接关闭!!!');
});
ws.on('error', (err) => {
console.log('websocket连接错误: ' + err);
});