[英]Create dynamically contexts for com.sun.net.httpserver.HttpServer (Java)
[英]Java SSE Server with com.sun.net.httpserver.HttpServer
如何用com.sun.net.httpserver.HttpServer
实现 SSE Server
我写了这样简单的HttpHandler
来测试连接:
public class SseResource implements HttpHandler {
@Override
public void handle(HttpExchange exchange) throws IOException {
Headers responseHeaders = exchange.getResponseHeaders();
responseHeaders.add("Content-Type", "text/event-stream");
responseHeaders.add("Connection", "keep-alive");
responseHeaders.add("Transfer-Encoding", "chunked");
responseHeaders.add("X-Powered-By", "Native Application Server");
exchange.sendResponseHeaders(200, responseHeaders.size());
OutputStream writer = exchange.getResponseBody();
for (int i = 0; i < 10; i++) {
writer.write("event: count\n".getBytes()); // <-- Connection Closed at this line
writer.write(("data: " + i + "\n").getBytes());
writer.write("\n\n".getBytes());
writer.flush();
sleep();
}
writer.close();
}
public static void sleep() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
不工作。
我用 Linux curl
命令测试连接:
curl -Ni http://localhost:8080/stream
HTTP/1.1 200 OK
Connection: keep-alive
X-powered-by: Native Application Server
Date: Thu, 10 Jun 2021 05:27:56 GMT
Transfer-encoding: chunked
Content-type: text/event-stream
Content-length: 4
curl: (18) transfer closed with outstanding read data remaining
我对 SSE 服务器有误解吗? 还是我的代码有问题?
响应大小应为零。
我将我的响应标头与此项目的结果进行比较: https://github.com/enkot/SSE-Fake-Server
exchange.sendResponseHeaders(200, 0);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.