【发布时间】:2019-07-31 20:45:22
【问题描述】:
我正在实现一个服务器发送事件应用程序逻辑。服务器端已经完成,我现在正在处理客户端部分。
在我所见的任何地方,JS 都在使用 EventSource 对象,这看起来非常合乎逻辑,因为它是为此而生的!但这也有很多限制(只有 GET 请求,没有标头,没有数据......)
我问自己:为什么不使用 XMLHttpRequest 对象呢?
我正在访问的服务器是用 Java EE 编写的,并返回一个文本/事件流类型的响应。
这是我的实现
var source = new EventSource("my_url");
source.onmessage = function (event) {
console.log(event.data);
};
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 3) {
console.log(xhttp.response);
}
};
xhttp.open("GET", "my_url", true);
xhttp.send();
两者都可以正常工作,但由于我完全没有找到有关该主题的信息,所以如果我没有做一些可怕的事情,我会措辞。
我能看到的唯一区别是,在 Ajax 中,响应是一个接一个地连接起来的。 我推断服务器缓冲区没有被刷新,但我对所有这些 HTTP 层的理解真的很低......
【问题讨论】:
-
"
EventSource实例打开到 HTTP 服务器的持久连接,该服务器以text/event-stream格式发送事件。连接保持打开状态,直到通过调用EventSource.close()关闭。一旦连接打开后,从服务器传入的消息以消息事件的形式传递给你的代码。与WebSockets不同,服务器发送的事件是单向的;即数据消息是单向传递的,从服务器到客户端(例如用户的网络浏览器)” (MDN) -
我知道那部分,但它没有回答有关 XMLHttpRequest 的问题
标签: javascript ajax server-sent-events eventsource