我正在分布式环境中在Play 2.0中实现长轮询.我理解的方式是,当Play获取请求时,它应该暂停更新的待处理通知,然后转到数据库以获取新数据并重复.我开始查看Play 2.0提供的聊天示例,但它是在websocket中.此外,它看起来不像是能够分发.所以我想我会用Akka的赛车.我采用了事件流实现并使用LookupClassification复制了我自己的实现.但是我很难知道我将如何收到消息(或者就此而言,应该是订户而不是ActorRef)?
EventStream实现:https: //github.com/akka/akka/blob/master/akka-actor/src/main/scala/akka/event/EventStream.scala
我一直在用JavaScript编写游戏,现在是时候让它成为多人游戏了.我想使用AJAX长轮询来获得当前的游戏状态,以及实现大厅.
服务器只需要执行基本功能,比如将游戏状态存储在mysql数据库中,检索游戏状态,并格式化记分板.
我认为用PHP编写它是最简单的,但由于它会产生的apache进程数量,这将是一个坏主意.
您有什么推荐的吗?我正在寻找最直接的方法.
编辑:StreamHub似乎很好,但社区版只允许10个并发用户.
我想将servlet 3.0异步支持与spring MVC集成.就像是:
@RequestMapping("/chat")
@WebServlet(name="myServlet", asyncSupported=true)
public String getMessage(String userName) {
......
}
Run Code Online (Sandbox Code Playgroud)
可能吗?
我正在构建一个具有一些实时约束的移动应用程序.因此,我转向stackoverflow获取建议和意见,并尝试确定在运行时更新应用程序状态的最佳解决方案:
除了APNS和C2DM提供统一的界面以在应用程序运行时推送通知这一事实之外,可以说自定义解决方案(基于长轮询或直接连接)更灵活,更少依赖于延迟Apple和Android排队.
据我所知,我认为大多数争论源于成本比较,与在智能手机上打开连接相比,它为保持连接打开消耗了多少电池.
因此,我对两件事特别感兴趣:
参考欢迎!谢谢!
android long-polling apple-push-notifications ios android-c2dm
我正在使用Firefox,但我想知道浏览器一般如何决定这一点.
似乎当我在很短的时间内两次访问同一个URL时,我的浏览器会尝试为两个请求重新使用TCP相同的连接(这称为keep-alive).但是,当我访问两个不同的URL(但仍由同一服务器提供服务)时,浏览器有时会决定为每个请求打开一个新连接.显然,浏览器不使用每个URL的一个连接策略.
我问这个是因为我正在尝试实现一个使用长轮询的Web服务.我可以想象用户可能希望在同一浏览器的多个选项卡中打开此服务.但是,使用keep-alive,第二个长轮询请求在第一个完成之前不会被发送(至少在Firefox中),因为浏览器正试图将它们都推到同一个套接字中,这是我没想到的设计了这项服务.即使浏览器实现了管道衬里,在我响应第一个请求之前也无法响应第二个请求,因为HTTP要求我按顺序完成响应.
使用Tornado,我有一个Get请求需要很长时间,因为它向另一个Web服务发出许多请求并处理数据,可能需要几分钟才能完全完成.我不希望这阻止整个Web服务器响应其当前所做的其他请求.
据我了解,Tornado是单线程并同步执行每个请求,即使它异步处理它们(仍然在那个位置上混淆).长进程的某些部分可能是暂停点,以允许服务器处理其他请求(可能的解决方案?).我在Heroku上运行它只有一个工作者,所以不确定如何转换为产生一个新的线程或多处理,我没有使用python的经验.
这里是我想要做的事:客户端发出GET调用来启动进程,那么我通过循环另一个get调用每5秒检查状态,并用新信息更新页面(长轮询也将工作,但运行进入同一问题).问题是启动长进程会阻止所有新的get请求(或新的长轮询会话),直到它完成为止.
是否有一种简单的方法可以启动这个长时间的呼叫,而不是让它在整个过程中阻止整个Web服务器?有没有什么我可以在代码中说.."暂停,处理待处理的请求然后继续"?
我需要在ProcessHandler上发起get请求.然后我需要继续能够在ProcessHandler运行时查询StatusHandler.
例:
class StatusHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
def get(self):
self.render("status.html")
class ProcessHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
def get(self):
self.updateStatus("0")
result1 = self.function1()
self.updateStatus("1")
result2 = self.function2(result1)
self.updateStatus("2")
result3 = self.function3(result2)
self.updateStatus("3")
self.finish()
Run Code Online (Sandbox Code Playgroud) 我正在考虑使用jQuery和PHP对消息系统进行一些长时间的轮询.我很想知道实现这一目标的最佳/最有效的方法.我基于这个简单的长轮询示例.
如果用户正坐在收件箱页面上,我想要提取任何新邮件.我见过的一个想法是last_checked在消息表中添加一列.PHP脚本看起来像这样:
query to check for all null `last_checked` messages
if there are any...
while(...) {
add data to array
update `last_checked` column to current time
}
send data back
Run Code Online (Sandbox Code Playgroud)
我喜欢这个想法,但我想知道别人怎么想.这是解决这个问题的理想方式吗?任何信息都会有所帮助!
要添加,网站上没有可用的设置数量,因此我正在寻找一种有效的方法.
我知道SignalR用于使用注入的动脉脚本与客户端浏览器进行通信.我有一个似乎常见的问题,那就是我的浏览器的网络日志中填充了如下所示的条目:
.../arterySignalR /民意调查?运输= longPolling&connectionToken = ...
这告诉我SignalR已经回归到长轮询,而不是使用网络套接字.假设我们有一个支持Web套接字的浏览器,并且该浏览器在localhost上运行,那么SignalR默认不应该使用Web套接字吗?什么可能导致它回归长期民意调查?
客户端定期调用异步方法(长轮询),向其传递一个股票代码的值,服务器使用该值来查询数据库并将对象返回给客户端.
我正在使用Spring的DeferredResult类,但是我不熟悉它的工作原理.请注意我如何使用symbol属性(从客户端发送)来查询数据库以获取新数据(见下文).
也许有更好的方法用于Spring的长轮询?
如何将symbol属性从方法deferredResult()传递给processQueues()?
private final Queue<DeferredResult<String>> responseBodyQueue = new ConcurrentLinkedQueue<>();
@RequestMapping("/poll/{symbol}")
public @ResponseBody DeferredResult<String> deferredResult(@PathVariable("symbol") String symbol) {
DeferredResult<String> result = new DeferredResult<String>();
this.responseBodyQueue.add(result);
return result;
}
@Scheduled(fixedRate=2000)
public void processQueues() {
for (DeferredResult<String> result : this.responseBodyQueue) {
Quote quote = jpaStockQuoteRepository.findStock(symbol);
result.setResult(quote);
this.responseBodyQueue.remove(result);
}
}
Run Code Online (Sandbox Code Playgroud) spring spring-mvc long-polling http-streaming server-sent-events
long-polling ×10
comet ×2
spring ×2
spring-mvc ×2
akka ×1
android ×1
android-c2dm ×1
browser ×1
browser-link ×1
flash ×1
http ×1
ios ×1
java ×1
javascript ×1
keep-alive ×1
php ×1
python ×1
scala ×1
servlet-3.0 ×1
signalr ×1
streaming ×1
tcp ×1
tornado ×1
websocket ×1