我有使用WatchService监听目录的工作代码,并响应我指定的事件.这很好,并且已经在linux和mac上进行了测试(尽管在后者上很明显使用了轮询).
但是,当我在生产中部署它时,结果是被监视的目录是NFS安装.由于WatchService在linux上运行时使用了inotify,因此从未触发任何事件,因为NFS挂载不会触发inotify事件(或类似的东西,这里有更多信息,这解释了我的问题:Java WatchService在观看映射驱动器时不生成事件) .
由于我的代码已经编写,我宁愿强制WatchService使用轮询实现而不是inotify实现.有没有办法做到这一点?
我通过查找sun.nio.fs.PollingWatchService源代码并直接创建对象(而不是使用FileSystems.getDefault(..newWatchService())来尝试此操作,但是当使用Path注册服务时,我得到了以下异常:java.nio .file.ProviderMismatchException.
那么,有什么想法吗?由于我已经使用WatchService和WatchKey API实现了代码,因此强制轮询比使用自定义或第三方轮询器重写所有内容要容易得多.谢谢!
我看到了一个关于为什么"民意调查不好"的问题.在最小化一个线程使用的处理器时间量方面,进行自旋等待(即轮询while循环中所需的更改)或等待内核对象(例如,windows中的内核事件对象)会更好吗? ?
对于上下文,假设代码将需要在任何类型的处理器,单核,超线程,多核等上运行.还假设轮询或等待的线程无法继续,直到轮询结果令人满意为止轮询而不是等待.最后,线程开始等待(或轮询)与满足条件之间的时间可能从很短的时间到很长的时间不等.
由于操作系统可能在"等待"的情况下更有效地"轮询",我不希望看到"等待只是意味着其他人做投票"的论点,这是旧闻,并不一定100%准确.
我正在使用UDP在python中进行一些线程异步网络实验.
我想了解polling和select python模块,我从未在C/C++中使用它们.
这些是为了什么?我有点理解,但在观看资源时会阻止吗?民意调查的目的是什么?
将Jenkins轮询间隔配置为:* * * * *将每分钟轮询SCM.有没有办法将其配置为轮询不到一分钟?例如每30秒?
我一直在进行基于网络的聊天,类似于Facebook聊天.在当前状态下,我会监听传入聊天并检查现有聊天中的新消息是做...
setTimeout(function() { listenForIncomingChat() }, 500);
setTimeout(function() { checkForIncomingMessages( ...params... ) }, 500);
Run Code Online (Sandbox Code Playgroud)
...这样做setTimeout()确保这些功能始终在运行.根据我打开的聊天窗口的数量,Firebug的控制台可能会疯狂地使用POSTs到服务器:)
显然这是非常低效的,但这是我能让事情发挥作用的唯一方式.现在我正在寻找让它变得更好的方法,正确地做到这一点!
现在,我听说过Comet Programming,这是与服务器打开长期HTTP连接的方法,但我不熟悉Comet背后的技术或思想.用于HTML5的WebSockets可能更好,但由于没有全面展开,也不是所有浏览器都支持,我会坚持使用的方法.
根据维基百科,有几种使用Comet风格开发的方法:Streaming(隐藏的iFrame,XMLHttpRequest)或带有长轮询的AJAX(XMLHttpRequest,Script标签).但是,我对此一无所知.我也读过有关AJAX推送引擎(APE)的内容,看起来很酷,但我暂时不想使用第三方.
我最近偶然发现了WebChat 2.0,所以我将通过源代码来查看它是如何工作的.
那么在哪里可以找到有关如何开始使用此类项目的示例代码/教程?我如何实施Comet技术?如何设置与服务器的长期HTTP连接?
我正在尝试将大型Scala + Akka + PlayMini应用程序与外部REST API连接.这个想法是定期轮询(基本上每1到10分钟)一个根URL,然后爬过子级URL以提取数据,然后将数据发送到消息队列.
我想出了两种方法:
创建一个actors层次结构以匹配API的资源路径结构.在谷歌纵横案例中,这意味着,例如
在这种情况下,每个actor负责定期轮询其相关资源,以及为下一级路径资源创建/删除子actor(即actor'luitude/v1/location'创建actor1,2,3等等.它通过投票https://www.googleapis.com/latitude/v1/location了解到的所有地点.
创建一个相同的轮询参与者池,接收由路由器负载平衡的轮询请求(包含资源路径),轮询URL一次,进行一些处理,并安排轮询请求(包括下一级资源和轮询URL) .在谷歌纵横中,这意味着例如:
1路由器,n个轮询演员.初始轮询请求https://www.googleapis.com/latitude/v1/location导致了一些新的(即时)查询请求https://www.googleapis.com/latitude/v1/location/1,HTTPS:/ /www.googleapis.com/latitude/v1/location/2等,以及相同资源的一个(延迟)轮询请求,即https://www.googleapis.com/latitude/v1/location.
我已经实现了两种解决方案,并且不能立即观察到任何相关的性能差异,至少不是我感兴趣的API和轮询频率.我发现第一种方法更容易推理,也许更容易使用系统.scheduler.schedule(...)比第二种方法(我需要scheduleOnce(...)).此外,假设资源嵌套在几个级别并且有些短暂(例如,可以在每次轮询之间添加/删除多个资源),akka的生命周期管理可以在第一种情况下轻松杀死整个分支.第二种方法应该(理论上)更快,代码更容易编写.
我的问题是:
谢谢!
我在我的项目中使用骨干,与外部API的通信集成.我想使用记录的实时更新.由于我无法访问此外部应用程序的主后端,并且它们既不提供websocket服务器也不提供长轮询端点,所以我基本上可以选择使用setInterval进行常规轮询,并且周期为50秒.它一直运作良好.我的问题是边缘情况.如果出于某种原因,API请求会挂起,超过50秒,我想说,我将立即触发新请求.这意味着,现在有2个挂起请求,最终会加起来.有没有办法为请求设置超时?我知道所有请求都导致Backbone.sync,但我正在检查源代码,我没有看到任何可行的方法来设置XmlHttpRequest的超时.有没有办法干净地完成这项工作而不会覆盖行为?还是有其他解决方案/解决方法吗?
我正在使用一个名为Processing的框架,它基本上是一个Java applet.它具有执行键事件的能力,因为Applet可以.您还可以将自己的各种回调转换为父级.我现在没有这样做,也许这就是解决方案.目前,我正在寻找更多的POJO解决方案.所以我写了一些例子来说明我的问题.
请忽略在命令行(控制台)上使用键事件.当然这将是一个非常干净的解决方案,但它不可能在命令行上,我的实际应用程序不是命令行应用程序.事实上,关键事件对我来说是一个很好的解决方案,但我试图了解事件和轮询,而不仅仅是键盘特定的问题.
这两个例子都翻转了一个布尔值.当布尔值翻转时,我想要触发一次.我可以将布尔值包装在一个Object中,所以如果Object发生了变化,我也可以触发一个事件.我只是不想不必要地使用if()语句进行轮询.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/*
* Example of checking a variable for changes.
* Uses dumb if() and polls continuously.
*/
public class NotAvoidingPolling {
public static void main(String[] args) {
boolean typedA = false;
String input = "";
System.out.println("Type 'a' please.");
while (true) {
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
try {
input = br.readLine();
} catch (IOException ioException) {
System.out.println("IO Error.");
System.exit(1);
}
// contrived state change logic …Run Code Online (Sandbox Code Playgroud) 我目前正在研究ac#.NET桌面应用程序,它将通过WCF和WCF数据服务通过Internet与数据库进行通信.应用程序中有许多位置可能需要在某个时间间隔内刷新.最简单的解决方案是将这些区域放在计时器上并重新查询数据库.但是,由于成千上万的客户端连接到服务层并因此连接到数据库,因此这些操作对服务器来说非常昂贵.
我考虑的是创建一个由客户端轮询的RSS提要,并让客户知道何时需要更新这些特定区域.RSS源将由一个服务进行管理,该服务轮询数据库以进行更改,或者遍历由客户端发出的WCF请求排队的项列表.
我还考虑过从客户端到服务器创建一些直接和连续的连接,但我不确定从客户端打开哪些出站防火墙端口.我可能只能依靠端口80/443.
所以我的问题是人们成功解决这个问题的解决方案是什么?有人做过RSS吗?Microsoft Sync Services?客户端和服务器之间通过WCF通过某个保存端口进行双向通信?
任何想法都非常感谢.
我很好奇Facebook如何像在新闻Feed中那样将数据推送到浏览器.新数据显示在Feed的顶部,无需重新加载页面或单击按钮
Facebook是否通过以设定的时间间隔通过AJAX轮询服务器来实现此目的,还是以某种方式将新数据从服务器推送到客户端?
如果是这样,他们使用什么语言或API来做到这一点?