我正在实现一个服务器发送事件应用程序逻辑。服务器端已经完成,现在我正在处理客户端部分。
无论我看哪里,JS都使用EventSource对象,这似乎非常合理,因为它是为此而设计的!但它也有很多限制(只能使用GET请求,没有标头,没有数据...)
我问自己:为什么不改用XMLHttpRequest对象呢?
我访问的服务器是用Java EE编写的,并返回一个text/event-stream类型的响应。
以下是我的实现。
无论我看哪里,JS都使用EventSource对象,这似乎非常合理,因为它是为此而设计的!但它也有很多限制(只能使用GET请求,没有标头,没有数据...)
我问自己:为什么不改用XMLHttpRequest对象呢?
我访问的服务器是用Java EE编写的,并返回一个text/event-stream类型的响应。
以下是我的实现。
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 不同,服务器推送的事件是单向的,也就是说,数据消息是从服务器单向传递到客户端(例如用户的 Web 浏览器)。 - Andreas