我需要创建像Facebook聊天这样的聊天.
使用Comet我需要更多内存来保持连接.
使用Ajax轮询,如果我每3-4秒发送一次请求,就会出现延迟问题.
所以...如果延迟(3-4秒)无关紧要,Ajax Polling对我的情况更好吗?
我必须设计并实现一种处理客户端/服务器应用程序中长时间运行的进程的方法.典型的长时间运行过程可能需要2-3分钟.我还需要在此期间向UI报告进度并保持UI响应.
考虑到这些,我想到了一些解决方案:
一个异步请求启动进程,启动服务器端进程并返回已分配的LRPID(长时间运行进程ID),然后使用该LRPID定期从客户端轮询.(专业:部署简单,没有防火墙搞乱Con:不雅,资源消耗等)
使用双工绑定(例如NetTcpBinding)并在进行过程中从服务器启动回调(Pro:优雅,高效,Con:部署噩梦)
[你的建议???]
你对此有何看法?
我需要在Web应用程序中构建一些非常激进的"自动刷新"功能.它是一种照片库,图像存储在AmazonS3上,但有关图像的数据存储在我们自己的数据库中.我玩过轮询服务器并发送ajax调用以获取更新的数据.我真的很担心这种方法对服务器的负载.有时,页面需要每15到30秒更新一次.
我一直在读Comet,我只是没有卖掉这个"黑客"是个好主意.WebSockets可能会有所帮助,但我担心它们太新而且太不受支持了.那么,话虽这么说,是否有人建议如何构建一个需要经常刷新并有可能拥有非常高的用户群的系统?
我并不认为只是为问题投入更多的服务器,但不相信这也是最好的方法.在其他人建议之前,我不能做Flex,因为网络应用程序必须在iPad上运行.
我有一个Rails 3应用程序,当用户点击页面时,它使用delayed_job获取一些数据(使用类方法).如何向ajax进程指示类方法已运行(以便我可以停止轮询)?
编辑:
为了澄清,我想知道delayed_job何时运行,而不是在ajax进程成功时.然后我想将delayed_job完成状态传递给正在运行的ajax进程.
我正在开发一个协作网站,我希望在用户查看或编辑数据时向他们发送通知.类似于StackOverflow中的内容,如果您回复问题并且顶部的通知弹出,表示该帖子有新的回复.
我可以看到如何使用某种轮询AJAX魔术来做到这一点,但我想知道是否有任何方法可以使用轮询将通知推送到浏览器?
感谢您的任何帮助/想法:)
编辑:
对于那些感兴趣的人,我选择了SignalR https://github.com/SignalR/SignalR/wiki/Hubs
我想在文件系统中轮询任何已更改,添加或删除的文件或子目录.应尽快检测所有更改,但不要对机器施加压力.操作系统是Windows> = Vista,观察到的部分是本地目录.
通常情况下,我会使用FileSystemWatcher,但这会导致其他程序试图查看相同位置的问题(突出显示,Windows资源管理器).另外,我听说FSW即使对于本地文件夹和大缓冲区也不是很可靠.
我遇到的主要问题是文件和目录的数量可能非常大(猜数为7位).只需每秒检查一次所有文件就会对我的机器造成明显影响.
我的下一个想法是每秒检查整棵树的不同部分以减少整体影响,并可能添加一种启发式方法,例如检查经常更快地更改的文件.
我想知道是否有这种问题的模式,或者是否有人有这种情况的经验.
WCF跟踪日志显示许多"The server has hit a PollingDuplex throttle, MaxSessionsPerAddress, and cannot accept another session from this client. An http error was returned"错误.
找不到有关MaxSessionsPerAddress设置的足够详细信息,只是发现这篇帖子MaxSessionsPerAddress总是说是10不能改变的.
只是在想可能是这个问题涉及到我的客户端代理,在这样的问题,一些超时结果实现它们共同容错逻辑:在通道故障WCF客户端代理的情况下关闭一个通道(关闭(),然后Aboort()在尝试/捕获),然后尝试重新连接每5秒,N次重试.也许客户端甚至在10次重试之后仍然无法连接在服务上创建了10个会话,因此所有下一次重试都被拒绝了?
一般信息:
WCF客户端:
WCF服务器:
任何帮助非常感谢!
我刚刚开始学习OBJ-C,但我确实有一个我正在努力建立的终极目标应用程序; 这个应用程序将成为iPad上的主/详细应用程序,需要通过"实时"自动更新Web服务.当多个用户之一(在单独的iPad上)在应用程序内执行某些操作时,它还需要将数据发送到远程MySQL数据库.
编辑:正如lxt如此有用地澄清:""使用推送通知作为推送网络服务的提示是否合适" - 答案就是这样."
我为这个问题想象的例子是一个小工具库存管理器,它具有流入表视图的"传入"库存和用户将库存拖放到详细视图中的"库存存储箱" .
像这样:

注意:我的应用程序不需要在不在前台时保持更新.它可以愉快地睡觉,直到它再次发射; 此时需要使用最新数据更新自己.Kyle使用applicationWillEnterForeground为问题的这个特定方面提供了答案:
为了在不过度使用我的web服务服务器的情况下实现这一点,我想象一个结合了webservice轮询和PUSH通知的解决方案,当一个用户(iPad)对数据进行任何更改时触发轮询.所以,流程将如下:
无论用户可能执行任何操作,Web服务的"默认"轮询都会每分钟触发一次.
当用户从tableview中拖动库存项目并将其放入存储仓中时,该存储仓会向登录到同一总体帐户的任何其他iPad发起PUSH通知,并触发Web服务轮询以刷新其数据.
简而言之:任何时候iPad"A"上的用户改变PUSH通知发送到iPad"B",iPad"C"等等.当B,C,D等接收到PUSH时,他们会轮询服务器刷新他们的数据.
另一种方法是让帐户中的每台iPad每隔15秒就启动webservice民意调查; 这看起来对我来说带宽很高(并且通常会导致数据没有变化).
我的问题不是"我怎么......?" 更多的是"我该怎么......?".我意识到StackOverflow可能会发现这有些"主观",但我认为这是一个非常有价值的问题,因为我花了两天时间研究这个特定的实践(使用PUSH通知来触发webservice轮询)并找到了完全零相关的文章.
感谢您抽时间阅读.任何帮助,将不胜感激.将非常感谢示例代码和/或特定框架/套件信息.但是现在我真的需要知道这是不是一个好主意.
我想轮询一个API端点,直到达到某种条件。我希望它能在几秒钟到一分钟内达到此条件。我有一个方法来调用返回一个的端点Future。我是否可以Future通过某种方法将s链接在一起以每n毫秒轮询一次此端点并在t尝试后放弃?
假设我有一个带有以下签名的函数:
def isComplete(): Future[Boolean] = ???
Run Code Online (Sandbox Code Playgroud)
我认为最简单的方法是使所有内容都阻塞:
def untilComplete(): Unit = {
for { _ <- 0 to 10 } {
val status = Await.result(isComplete(), 1.seconds)
if (status) return Unit
Thread.sleep(100)
}
throw new Error("Max attempts")
}
Run Code Online (Sandbox Code Playgroud)
但这可能会占用所有线程,并且不是异步的。我还考虑了递归执行:
def untilComplete(
f: Future[Boolean] = Future.successful(false),
attempts: Int = 10
): Future[Unit] = f flatMap { status =>
if (status) Future.successful(Unit)
else if (attempts == 0) throw new Error("Max attempts")
else {
Thread.sleep(100) …Run Code Online (Sandbox Code Playgroud) 我正在使用PrimeFaces民意调查组件刷新一些内容.
<h:form id="formBsvtt">
<p:messages autoUpdate="true" showDetail="false" />
<p:outputPanel id="panelOut" layout="block">
...
... content to refresh
...
</p:outputPanel>
<p:panelGrid id="panelIn" layout="block">
...
... various input components with validation
...
</p:panelGrid>
<p:poll widgetVar="poll1" autoStart="true" global="false" interval="15"
partialSubmit="true" process="@this" update="panelOut"
listener="#{myBean.myListener}">
</p:poll>
</h:form>
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在使用autoUpdate = true的消息.我的问题是:如果出现验证错误,将显示FacesMessages,但不会迟于15秒消失.
是否可以在不设置消息autoUpdate = false的情况下阻止轮询清除FacesMessages?
我的Web应用程序比上面指定的代码片段大得多,我的意图是不在每种可能的情况下手动更新消息!
polling ×10
ajax ×4
comet ×3
wcf ×2
.net ×1
.net-4.0 ×1
akka ×1
asynchronous ×1
c# ×1
chat ×1
delayed-job ×1
duplex ×1
filesystems ×1
future ×1
html ×1
ios ×1
javascript ×1
jsf ×1
objective-c ×1
primefaces ×1
progress-bar ×1
scala ×1
silverlight ×1
web-services ×1
websocket ×1