Google如何实施推送通知功能?它是通过在后台运行的服务还是以不同的方式完成的轮询来工作的?
是否有可靠的跨浏览器方式来检测选项卡是否具有焦点.
场景是我们有一个应用程序定期轮询股票价格,如果页面没有焦点我们可以停止轮询并节省每个人的交通噪音,特别是当人们是打开不同组合的几个选项卡的粉丝.
是window.onblur和window.onfocus这个选项?
我正在学习jQuery,我正在尝试找到一个简单的代码示例,它将针对某个条件轮询API.(即每隔几秒请求一个网页并处理结果)
我熟悉如何在jQuery中使用AJAX,我似乎无法找到让它在"计时器"上执行的"正确"方式.
我是一个初学者到中级的JavaScript/jQuery程序员,因此非常感谢具体/可执行的例子.
我的项目需要使用AJAX来轮询返回包含要添加到DOM的内容的JSON的URL,或者使用消息{"status":"pending"}来表示后端仍在使用内容生成JSON响应.这个想法是对URL的第一个请求触发后端开始构建JSON响应(然后缓存),后续调用检查这个JSON是否准备就绪(在这种情况下它是提供的).
在我的脚本中,我需要以15秒的间隔轮询此URL,最多1:30分钟,并执行以下操作:
我尝试了一些方法,但成功有限,但我觉得它们比他们需要的更加混乱.这是一个骨架函数,我成功地使用它来一次制作一个AJAX请求,如果我从JSON响应中获得可用内容,它就能完成它的工作:
// make the AJAX request
function ajax_request() {
$.ajax({
url: JSON_URL, // JSON_URL is a global variable
dataType: 'json',
error: function(xhr_data) {
// terminate the script
},
success: function(xhr_data) {
if (xhr_data.status == 'pending') {
// continue polling
} else {
success(xhr_data);
}
},
contentType: 'application/json'
});
}
Run Code Online (Sandbox Code Playgroud)
但是,除非收到包含可用内容的有效JSON响应,否则此函数当前不执行任何操作.
我不知道该怎么做只是评论.我怀疑另一个函数应该处理轮询,并_根据需要调用ajax request(),但我不知道ajax _request()将其结果传递回轮询函数的最优雅方式,以便它可以适当地响应.
很感谢任何形式的帮助!如果我能提供更多信息,请告诉我.谢谢!
所以...我正在为Android制作应用程序.应用程序需要发送和接收实时聊天数据(需要是一个套接字),但它也需要发送命令(这不是客户端在发送内容时知道的).
我需要知道在节省用户电池方面什么是更好的解决方案.
a)每次发送命令时打开和关闭连接,如果打开聊天选项卡,则保持连接不变.
b)始终保持连接不变.
我已经浏览了一下互联网,但得到了不同的答案,有人说保持持久的连接对电池寿命有害,而另一些人则认为不是(例如:"你问是否打开TCP连接会耗尽电池电量- 生活?也许我在这里不过了,但打开连接不应该浪费电池寿命......如果你认为我会想知道你在哪里得到这些信息.这对我来说听起来很奇怪.")
或者,如果有另一种解决方案会更好.我不认为谷歌的C2DM在这种情况下也会非常有用.
基本上,更多的是耗尽电池:持久连接,或者打开和关闭连接,除非聊天标签打开?
谢谢!
如果有一个REST资源我想要监视来自其他客户端的更改或修改,那么最好的(也是最RESTful)方式是什么?
我这样做的一个想法是提供特定的资源来保持连接打开,而不是在资源不存在的情况下立即返回.例如,给定资源:
/game/17/playerToMove
Run Code Online (Sandbox Code Playgroud)
这个资源上的"GET"可能会告诉我轮到我的对手了.我可能会注意到移动号码(比如5)并试图检索下一步行动,而不是不断地轮询这个资源以找出轮到我移动的时间:
/game/17/move/5
Run Code Online (Sandbox Code Playgroud)
在"正常"REST模型中,似乎对此URL的GET请求将返回404(未找到)错误.但是,如果相反,服务器保持连接打开,直到我的对手发挥他的移动,即:
PUT /game/17/move/5
Run Code Online (Sandbox Code Playgroud)
然后服务器可以将我的对手PUT的内容返回到该资源.这将为我提供我需要的数据,以及一种通知我的对手何时移动而不需要轮询.
这种方案是RESTful吗?或者它违反了某种REST原则?
对于需要刷新以设置间隔呈现给用户的部分数据的简单webapp,使用setInterval()从端点获取JSON而不是使用适当的轮询框架是否有任何缺点?
为了举例,我想说我每5秒刷新一次处理作业的状态.
我正在尝试实现一个带回退轮询的WebSocket.如果WebSocket连接成功,则readyState变为1,但如果失败,readyState则为3,我应该开始轮询.
我试过这样的事情:
var socket = new WebSocket(url);
socket.onmessage = onmsg;
while (socket.readyState == 0)
{
}
if (socket.readyState != 1)
{
// fall back to polling
setInterval(poll, interval);
}
Run Code Online (Sandbox Code Playgroud)
我期待socket.readyState异步更新,并允许我立即阅读.然而,当我运行这个时,我的浏览器会冻结(我放弃它大约半分钟才放弃).
我想也许有一个onreadyStateChanged事件,但我没有在MDN参考中看到一个.
我应该如何实现这个?显然空循环不起作用,并且没有事件发生.
我必须每隔一两秒钟在屏幕上监控一些数据更新信息.我认为使用此实现的方式:
componentDidMount() {
this.timer = setInterval(()=> this.getItems(), 1000);
}
componentWillUnmount() {
this.timer = null;
}
getItems() {
fetch(this.getEndpoint('api url endpoint"))
.then(result => result.json())
.then(result => this.setState({ items: result }));
}
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?
polling ×10
javascript ×4
ajax ×2
android ×2
jquery ×2
.net ×1
asp.net ×1
battery ×1
c# ×1
json ×1
long-polling ×1
optimization ×1
reactjs ×1
rest ×1
setinterval ×1
sockets ×1
tcp ×1
websocket ×1