目前我正在以 JSON 格式编写数据,一次一条消息,如下所示:
String[] arr = strLine.split(",");
out.append("data: {\n");
out.append("data: \"c1\": " + arr[0].toString()+ ",\n");
out.append("data: \"c2\": " + arr[1].toString()+ ",\n" );
out.append("data: }\n\n");
out.flush();
但是,现在我只想在有 5 条这样的消息时才 out.flush 。那么,我该怎么做呢?创建 Json 消息?带有单独的数据:{ } 正文。如果我这样做,我如何在客户端使用 javascript 访问 c1、c2 对?还有什么选择。
PS:当我说 5 个值时,我的意思是 c1 和 c2 的 5 对值。
以及如何在客户端使用 javascript 访问值,如果我做这样的事情
out.append("data: [\n");
for(int j=0; j<5; j++) {
String[] arr = strLine.split(",");
if (j!=0) out.append(",\n");
out.append("\{"c1\": " + arr[0].toString()+ ",\n");
out.append(\"c2\": " + arr[1].toString()+"}" );
out.flush();
}
//HEY MR, LOOK BELOW ME
//HEY MR, LOOK BELOW ME
//HEY MR, LOOK BELOW ME
//HEY MR, LOOK BELOW ME
out.append("]\n"); <---- HEY RIGHT HERE
//HEY MR, LOOK ABOVE ME
//HEY MR, LOOK ABOVE ME
//HEY MR, LOOK ABOVE ME
//HEY MR, LOOK ABOVE ME
out.flush();
按要求工作 JS 代码(在身体负载上调用 registerSSE() ):
function registerSSE(){
var source = new EventSource ('http://localhost:8080/SSE_Test1/ReadCsv');
source.addEventListener('message', function(e) {
var data = JSON.parse(e.data);
console.log(data.timestamp, data.c1, data.c2, data.c3, data.c4);
}
在 servlet 中,您只需要附加这一行:
response.setContentType("text/event-stream");