簡體   English   中英

Java SSE 服務器與 com.sun.net.httpserver.HttpServer

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM