我是Server-Sent-Events的新手。我有一个事件发射器,它每2秒发送一次更新(使用SseEmitter,托管在Tomcat上),我看到当我在一个新窗口中打开URL时,消息并没有被发送到前面的窗口。请看下面的图片。

这是服务器发送事件的预期行为吗?我需要向所有连接到我的流URL的客户端发送更新。我是否需要在我的应用程序或tomcat服务器上进行任何额外的配置或设置?请帮帮忙
这是控制器
@Controller
public class MySSEController {
private final SseEmitter sseEmitter = new SseEmitter(100000l);
private int counter = 0;
@RequestMapping("/ssestream")
public SseEmitter getRealTimeMessageAction() throws IOException {
sseEmitter.send("MessageCounter : " + counter);
return sseEmitter;
}
@Scheduled(fixedDelay = 2*1000)
public void scheduledMsgEmitter() throws IOException
{
if(null != sseEmitter) {
sseEmitter.send("MessageCounter : " + ++counter);
}
}
}发布于 2018-08-28 01:37:18
尝试如下:
@Controller
public class MySSEController {
private List<SseEmitter> sseEmitters = new ArrayList<>();
private int counter = 0;
@RequestMapping("/ssestream")
public SseEmitter getRealTimeMessageAction() throws IOException {
SseEmitter sseEmitter = new SseEmitter(100000l);
sseEmitter.send("MessageCounter : " + counter);
sseEmitters.add(sseEmitter);
return sseEmitter;
}
@Scheduled(fixedDelay = 2 * 1000)
public void scheduledMsgEmitter() {
counter++;
List<SseEmitter> toRemove = new ArrayList<>();
for (SseEmitter sseEmitter : sseEmitters) {
try {
sseEmitter.send("MessageCounter : " + counter);
} catch (IOException ignore) {
toRemove.add(sseEmitter);
}
}
for (SseEmitter remove : toRemove) {
sseEmitters.remove(remove);
}
}
}https://stackoverflow.com/questions/42858697
复制相似问题