我有一个如下工作的应用程序:Linux机器为客户生成28种不同类型的信件.这些字母必须以.docx(Microsoft Word格式)发送.秘书维护MS Word模板,必要时自动使用.不能使用MS Word进行更改.
为了协调所有这些,文档作业被放入数据库表中,并且在每台Windows机器上运行的python程序经常轮询数据库,锁定作业并根据需要运行它们.
我们使用中央数据库表来获取作业信息,以协调不同的状态("新","处理","完成","打印")......以及提供准确的状态信息.
无论如何,我不喜欢客户经常轮询数据库,因为他们大部分时间都没有工作.客户每5秒钟一次.
为了避免轮询,我有点想要广播"有一些工作要做"或"检查你的数据库是否有一些工作要做"的消息发送到所有客户端机器.
我认为某种发布/订阅消息队列可以胜任这项工作,但我不希望任何大规模的额外复杂性.
是否有零或接近零的配置/维护软件才能实现这一目标?有什么选择?
X
我在我的手机(客户端)上运行了一个J2ME应用程序,
我想打开与服务器的HTTP连接,并继续轮询服务器上的更新信息.
由于GPRS计费基于发送和接收的数据包,因此每次轮询都会耗尽GPRS字节,从长远来看会变得昂贵.是否有一种使用HTTP协议进行轮询的字节有效方法?
我也听说过长时间的民意调查,但我不确定它是如何运作的,效率如何.
实际上,优先选择的方式是服务器告诉手机应用程序新数据已准备好使用,这样就不需要进行轮询,但是我不知道这些技术,特别是在J2ME中.
我必须承认,这是我在这个网站上的第一篇文章,所以如果我做错了(格式化等),我会在建议中道歉.
无论如何,我正在使用javascript(和jQuery)创建一种mmo,到目前为止,Chrome,Safari,Firefox等都运行良好.但是,我发现在某个地方,Internet Explorer崩溃了.
通过重现崩溃,我把它缩小到这个代码:
function getUpdates(){
var data={uid:playerName,area:1,mid:lastMessage};
$.ajax({
url: "getUpdates.py",
timeout: 32000,
data: data,
type:"GET",
complete: function(obj, textStatus){
//handleUpdates(obj);
getUpdates();
}
});
}
Run Code Online (Sandbox Code Playgroud)
应该在很长一段时间内轮询更新.但是,在一次回复之后的IE中,这段代码陷入无限循环,这会使浏览器崩溃.只有在没有服务器响应时,每次回复后似乎都不会崩溃.
注意,表示"完成:......"的行已被尝试为:
success: function(...){getUpdates();...},
error: function(...){getUpdates();...}
Run Code Online (Sandbox Code Playgroud)
出现同样的问题.
我有一个网页,我需要检查服务器每秒更新一次.更新可能相对频繁或不常见.可能有很多Web客户端同时检查服务器是否有更新.这可以是每秒一次的AJAX请求,也可以是模拟服务器推送的"长轮询".我想用哪种方法?为什么?似乎每秒启动HTTP连接的开销可能会使长轮询方法更受欢迎.另一方面,服务器可以维护的并发连接数可能存在限制.对这些技术进行一些比较对我来说有用,可以决定走哪条路.
我每隔一秒轮询一次我的数据库,只有在新的条目提交到数据库之后我才需要它做一些事情; 它不能只是重新拉动一切.有帮助吗?
有许多方法,可以使用创建程序并只调用Unix tail命令,但问题是该进程必须安装在安装了尾部的Unix机器上.
另一个选择是直接读取文件,直到没有更多行,睡眠一段时间然后尝试读取下一行并重复.
问题是我如何/如何轮询正在被写入的文件.AFAIK在Java中没有办法在文件被修改时获得异步通知,因为这个级别太低(来自操作系统的东西).我也知道没有lib支持这个.
我在想一个更好的方法可能是在文件的修改日期进行睡眠/轮询..?
有解决方案吗
请考虑以下代码段.
#include <fcntl.h>
#include <stdio.h>
#include <sys/poll.h>
#include <unistd.h>
int main(int argc, char ** argv) {
int fd;
char buf[1024];
int i;
struct pollfd pfds;
fd = open(argv[1], O_RDONLY);
while (1) {
pfds.fd = fd;
pfds.events = POLLIN;
poll(&pfds, 1, -1);
if (pfds.revents & POLLIN) {
i = read(fd, buf, 1024);
write(1, buf, i);
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该程序接收文件名,打开相应的文件,并"轮询"其文件描述符,以便监视可用性中的数据.每当poll检测到可用性数据时,都会打印这些新数据.
但是,这个程序会发生什么?如果我要监视的文件在程序启动时已包含数据,则打印其内容.没关系.但是,稍后,当我使用文本编辑器编辑文件并保存它时,我的程序不会打印新数据.
那么,如何监视常规文件描述符(不是使用其路径的文件)以获得新的数据可用性?我是否必须使用其他功能poll?或者我错过了任何pollfd旗帜?
GitHub的API提供了活动事件的特征users,orgs和repos.API支持分页最多10页,总共300 页,每页events30 events页.使用ETAG标头实现速率限制.我正在尝试轮询此API以获取最新活动.然而,由于Github所提供的设计,该方案非常低效.可以说,我就请求page-1通过
https://api.github.com/users/me/events/orgs/my-org?page=1
Run Code Online (Sandbox Code Playgroud)
我将获得ETAG此页面的条目.现在我移动到下一个page-2并做
https://api.github.com/users/me/events/orgs/my-org?page=2
Run Code Online (Sandbox Code Playgroud)
并将获得ETAG第2页.同样,我可以从所有10个支持的页面中提取事件.
现在让我们说我的orgs Github帐户上执行了一些活动.让我们假设只发生了一个新事件.在这种情况下,当我使用它poll的API 将返回已更改的页面,其中包含新的.同样在其前面也将发送改变页.然而,这种变化是之前最后一次事件并且现在已经移至顶部的事件.所有页面都会发生这种"转移到下一个".没有办法找出发生的新事件的数量.唯一的解决方案是继续轮询以获取最新信息.然而,这种方法有一个严重的缺陷解释如下:page-1ETAGeventpollingpage-2ETAGpage-2page-1page-2page-1events
当events我的poll轮次之间的新数量大于30(一页上的最大项目)时,情况会变得更糟.在这种情况下,最新的30个事件之前的事件将page-2直接滑到.如果我只是poll在page-1我身上会失去这些滑倒的事件page-2.我想到的唯一解决方案是保留整个事件的缓存,然后扫描所有页面.然而,这是一种非常有效且不可取的方式,并且杀死事件通知API的目的.
我希望有些github-dev可以回答这个问题
我期待有关Selenium中硒webdriver轮询时间的正确解释.
据我所知,下面的wait命令会等待40秒,直到特定元素被点击为止
public void CreateSalesOrder(){
WebDriverWait wait = new WebDriverWait(driver, 40);
wait.until(ExpectedConditions.elementToBeClickable(btnNewSalesOrser));
btnNewSalesOrser.click();
}
Run Code Online (Sandbox Code Playgroud)
在第二个代码片段中,我添加了"轮询"命令.
public void CreateSalesOrder(){
WebDriverWait wait = new WebDriverWait(driver, 40);
wait.pollingEvery(2, TimeUnit.SECONDS);
wait.until(ExpectedConditions.elementToBeClickable(btnNewSalesOrser));
btnNewSalesOrser.click();
}
Run Code Online (Sandbox Code Playgroud)
轮询时间有什么用?
在我的应用程序中,我使用MemoryCache,但是我不希望项目过期。因此项目被插入到与默认策略缓存,没有AbsoulteExpiration或者SlidingExpiration被设置。
最近,在最后一台高服务器上,我遇到了缓存问题,因为它返回空值代替期望值,并在之前插入到缓存中。事实证明,不仅合格的项目(如明确设置了到期日期的项目)都从缓存中删除。在内存压力下,超过CacheMemoryLimit和/或值时PhysicalMemoryLimit,MemoryCache也会删除其他元素。
如何预防呢?如何确保将元素设置为一次缓存后,可以再次从中安全地获取它?
我考虑过将设置PollingInterval为某个巨大的值,但这只会延迟潜在的问题(并且轮询间隔在文档中被称为最大时间,而不是确切时间或最小时间)。设置PhysicalMemoryLimitPercentage为100%并不能解决问题,因为它引用的是物理安装的内存,而不是整个可用虚拟内存。还是我错了,这确实会有所帮助吗?
polling ×10
java ×3
ajax ×2
jquery ×2
.net ×1
api ×1
c# ×1
caching ×1
crash ×1
file ×1
file-io ×1
github ×1
github-api ×1
http ×1
java-me ×1
linux ×1
long-integer ×1
long-polling ×1
memorycache ×1
mobile ×1
mysql ×1
performance ×1
php ×1
push ×1
selenium ×1