我已经在Java服务器中设置了SSE(服务器发送事件)。客户端构建在VueJS上,并使用EventSource包从服务器接收事件。我正在使用EventSourcePolyfill npm包https://www.npmjs.com/package/event-source-polyfill在客户端上。这个包允许我们在请求中发送授权头(针对我们的安全方案)。
客户端向我们的SSE服务发送请求并接收一个类型为“open”的单个事件。SSE然后不发送进一步的事件或发送事件并且浏览器不会检测到它们。为什么会这样?修复建议?没有错误消息。
这种行为发生在Chrome、Firefox和Edge中,因此可能与浏览器无关。
Our client method...
testSSE() {
console.log("in testSSE()");
console.log("apikey: " + store.user.apikey);
var EventSource = EventSourcePolyfill;
const evtSource = new EventSource(
"http://localhost:8081/api/ssetest/test",
{ headers: { Authorization: "Bearer " + store.user.apikey } }
);
evtSource.onmessage = function(event) {
console.log("received message");
console.log("event.data: " + event.data);
};
//This is the only function that gets hit
evtSource.addEventListener("open", function(event) {
console.log("open event");
console.log(Object.keys(event));
console.log(event.type);
});
evtSource.addEventListener("message", function(event) {
console.log("message event");
});
evtSource.addEventListener("stringEvent", function(event) {
console.log("received ping event");
console.log("event.data: " + event.data);
});
evtSource.onerror = function(err) {
console.error("EventSource failed:", JSON.stringify(err));
};
}
这是我们的服务器代码@路径(“ssetest”)公共类SSETESService扩展了SecureService{
@GET
@Path("/test")
@Produces("text/event-stream")
public void runTest(@Context Sse sse, @Context SseEventSink sseEventSink)
{
int lastEventId = 0;// ..;
while (lastEventId < 10) {
OutboundSseEvent stringEvent = sse.newEventBuilder()
.name("" + lastEventId)
.mediaType(MediaType.APPLICATION_JSON_TYPE)
.data("hello world")
.id(String.valueOf(lastEventId))
.reconnectDelay(4000) // .comment("price change")
.build();
sseEventSink.send(stringEvent);
lastEventId++;
TimeUnit.SECONDS.sleep(1);
}
}
}
Browser console output...
[![enter image description here][1]][1]
[1]: https://i.stack.imgur.com/iR57U.png
我也有类似的问题。将@products value转换为“application/stream json”为我解决了这个问题。
我想要实现的是: user1向服务器发送消息(一个简单的POST请求) 服务器部分是(events.php) 我在(true)时尝试了无限循环以避免3秒的轮询。我也尝试过没有那个无限循环。只有发送消息的用户收到事件。 我理解这种做法并不好。但是,将SSE用于聊天应用程序的最佳实践是什么? 如何向所有用户发送事件?
我无法理解HTML5s服务器发送的事件是否真的适合ReST体系结构。我知道并非HTML5/HTTP的所有方面都需要适合ReST架构。但我想从专家那里知道HTTP的哪一半是SSE(ReSTful的一半还是另一半!)。 一种观点是它是ReSTful的,因为客户端向服务器发出了一个“初始”HTTP GET请求,其余的只能看作是不同内容类型的部分内容响应(“文本/事件流”) 发送的请求不知道有多少响应将作
您好,我正在React中开发一个web应用程序,它使用Nginx从Express服务器接收SSE数据。 JS服务器 索引:JS const events=新事件源('https://api.myDomain.com/events', ); axios。post(<代码>https://api.myDomain.com/addCart,{客户端:this.state.clientId,购物车:car
我正在尝试使用泽西岛的JavaScript SSE。我的资源中有以下代码。我在Java7和Tomcat 7上托管。我没有收到任何错误。但我也没有在页面上看到数据。 我调用发布数据。它确实显示信息。但客户什么都没有。在Firefox中,我确实看到事件多次触发。 这是我使用的参考。https://jersey.java.net/documentation/latest/sse.html 我的Index
我正在编写自己的websocket服务器和客户端。我成功地处理了握手并建立了联系。 现在我正在编写send_message函数,它创建了一个合适的框架。下面的例子只是为了这个问题,它不是我最终打算写的,这只是我尝试给我相同的结果的许多方法中的一种。 输入:以上函数应发送 第一个字节 第一位设置为1-,表示这是消息的最后一帧 第二、第三和第四个-所有的零,对于这个例子来说是不相关的 以下四位-000
我有一个ASP。net core 3.1服务器项目,它有一个非常简单的API发送单向服务器发送事件(SSE),如下所示: 现在,我想通过C#UWP客户端接收这些事件。很遗憾,我只收到第一个事件: 如何在UWP中创建行为以始终监听该连接并接收我可以进一步处理的事件?