Javascript http自定义进度反馈给客户端
我有一个http服务器,它根据客户机的请求,在后台运行某个任务,这可能需要一些时间才能将结果返回给客户机 有没有办法用特定后台任务的进度信息更新客户端 XMLHttpRequest有一个进度处理程序,但如果我理解正确的话,它只用于数据传输进度 在我的应用程序中,流的一个示例如下:Javascript http自定义进度反馈给客户端,javascript,http,server,xmlhttprequest,Javascript,Http,Server,Xmlhttprequest,我有一个http服务器,它根据客户机的请求,在后台运行某个任务,这可能需要一些时间才能将结果返回给客户机 有没有办法用特定后台任务的进度信息更新客户端 XMLHttpRequest有一个进度处理程序,但如果我理解正确的话,它只用于数据传输进度 在我的应用程序中,流的一个示例如下: 客户端发送GET请求 服务器所做的事情可能需要时间。如何更新客户端的进展情况 服务器向客户端返回响应。根据数据大小,也可能需要时间。这里可以使用XMLHttpRequest进度事件 这是http规范的一部分吗?或者我需
- 在在线图书中表现出色 浏览器网络
var source = new EventSource("/server-side-app-that-gives-progress-updates")
source.onmessage = function(e) {
console.log(e.data);
}
在服务器端,提供进度更新的/server-side应用程序只会发回格式如下的纯文本数据:
data: some data\n
data: more data\n\n
它通过发送带有内容类型:text/event stream
标题的响应来启动流式处理。上面的客户端代码将其视为一条带有“一些数据\更多数据”的e.data
消息
当服务器应用程序有更新时,它只是将该形式的另一条消息写入响应
如果您希望将更新作为一系列JSON消息发送,则服务器应用程序会写入:
data: {"foo": "bar", "hoge": "moge"}\n\n
然后您的客户端代码可以执行以下操作:
source.onmessage = function(e) {
var jsonObject = JSON.parse(e.data);
console.log(jsonObject.foo);
}
当然,你可以在上面提到的地方了解更多。但简而言之就是这样
我有一个http服务器,它根据客户机的请求在服务器中运行特定的任务
背景,可能需要一段时间才能返回
将结果发送给客户
这是服务器发送事件设计的关键用例之一
有没有办法用进度信息更新客户机
具体的背景任务
是的,您可以通过服务器发送的事件来实现这一点
有XMLHttpRequest
的进度处理程序,但如果我理解
正确地说,它仅用于数据传输进度
对。XHR无法在it响应之前获取服务器上发生的任何事件的进度信息
在我的应用程序中,流的一个示例如下:
这是http规范的一部分吗
它不是HTTP规范的一部分(尽管HTTP/2有一些相关的特性)
或者我需要其他东西(websocket..?)
这不需要WebSocket。WebSockets非常适合在客户端和服务器之间进行真正的双向全双工通信的情况,例如,实时聊天应用程序
但是问题中描述的用例是只需要从服务器到客户机的单向更新通信的用例。这正是服务器发送事件所需要的。 你应该考虑使用。以下是一些可以了解更多信息的地方:
- 在在线图书中表现出色
浏览器网络
服务器发送的事件有,也有,甚至有
下面是一些客户端代码的一个非常简单的示例:
var source = new EventSource("/server-side-app-that-gives-progress-updates")
source.onmessage = function(e) {
console.log(e.data);
}
在服务器端,提供进度更新的/server-side应用程序只会发回格式如下的纯文本数据:
data: some data\n
data: more data\n\n
它通过发送带有内容类型:text/event stream
标题的响应来启动流式处理。上面的客户端代码将其视为一条带有“一些数据\更多数据”的e.data
消息
当服务器应用程序有更新时,它只是将该形式的另一条消息写入响应
如果您希望将更新作为一系列JSON消息发送,则服务器应用程序会写入:
data: {"foo": "bar", "hoge": "moge"}\n\n
然后您的客户端代码可以执行以下操作:
source.onmessage = function(e) {
var jsonObject = JSON.parse(e.data);
console.log(jsonObject.foo);
}
当然,你可以在上面提到的地方了解更多。但简而言之就是这样
我有一个http服务器,它根据客户机的请求在服务器中运行特定的任务
背景,可能需要一段时间才能返回
将结果发送给客户
这是服务器发送事件设计的关键用例之一
有没有办法用进度信息更新客户机
具体的背景任务
是的,您可以通过服务器发送的事件来实现这一点
有XMLHttpRequest
的进度处理程序,但如果我理解
正确地说,它仅用于数据传输进度
对。XHR无法在it响应之前获取服务器上发生的任何事件的进度信息
在我的应用程序中,流的一个示例如下:
这是http规范的一部分吗
它不是HTTP规范的一部分(尽管HTTP/2有一些相关的特性)
或者我需要其他东西(websocket..?)
这不需要WebSocket。WebSockets非常适合在客户端和服务器之间进行真正的双向全双工通信的情况,例如,实时聊天应用程序
但是问题中描述的用例是只需要从服务器到客户机的单向更新通信的用例。这正是服务器发送事件的目的