import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import com.sun.net.httpserver.*;
public class StreamingServer {
public static void main(String[] args) throws IOException {
HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
// 设置请求处理器
server.createContext("/streaming", new StreamingHandler());
// 启动服务器
server.start();
System.out.println("Server started on port 8000");
}
static class StreamingHandler implements HttpHandler {
@Override
public void handle(HttpExchange exchange) throws IOException {
// 设置响应头,声明为流式传输
exchange.getResponseHeaders().add("Content-Type", "application/octet-stream");
// 开始发送响应数据
OutputStream outputStream = exchange.getResponseBody();
for (int i = 0; i < 10; i++) {
byte[] data = generateData(); // 生成要发送的数据
outputStream.write(data);
outputStream.flush();
try {
Thread.sleep(1000); // 每秒发送一次数据
} catch (InterruptedException e) {
e.printStackTrace();
}
}
outputStream.close();
}
private byte[] generateData() {
// 生成数据的逻辑,此处仅返回固定长度的数据
return new byte[1024];
}
}
}
<!DOCTYPE html>
<html>
<head>
<title>Streaming Test</title>
</head>
<body>
<div id="output"></div>
<script>
var outputDiv = document.getElementById("output");
var xhr = new XMLHttpRequest();
// 监听数据到达事件
xhr.onprogress = function(event) {
if (event.lengthComputable) {
var percentComplete = Math.floor((event.loaded / event.total) * 100);
outputDiv.innerHTML = "Progress: " + percentComplete + "%";
} else {
outputDiv.innerHTML = "Receiving data...";
}
};
// 接收完整响应后处理数据
xhr.onload = function() {
outputDiv.innerHTML = "Streamed response received.";
// 这里可以根据具体需求处理接收到的数据
};
xhr.open("GET", "http://localhost:8000/streaming", true);
xhr.send();
</script>
</body>
</html>