我正在寻找一个基于谷歌地图的网络应用程序.我最初的想法是,在第一阶段,重点应放在前端,后端应该易于编写和原型,并应尽可能地帮助前端的发展.
没有"经典"页面,只有meebo.com风格的界面.javascript + jquery.(意思是,如果没有静态页面,则很少).
我的眼睛已经抓住了彗星风格的服务器推送范例,我真的很有兴趣用这个做一些概念证明.
您是否有任何建议或优缺点或使用经验:
Python + Tornado vs Scala + Lift?
Web应用程序的其他方面还有哪些优点或缺点可供选择?
注意:这适用于最多2位开发人员,而不是大型分布式和变更团队.
谢谢
我是否需要传回任何HTTP标头告诉浏览器我的服务器不会立即关闭连接并显示为收到HTML?是否有必要让HTML逐步显示为flush()?
这种技术曾经用于聊天等事情,但我正在考虑将它用于COMET类型的应用程序.
我一直在用JavaScript编写游戏,现在是时候让它成为多人游戏了.我想使用AJAX长轮询来获得当前的游戏状态,以及实现大厅.
服务器只需要执行基本功能,比如将游戏状态存储在mysql数据库中,检索游戏状态,并格式化记分板.
我认为用PHP编写它是最简单的,但由于它会产生的apache进程数量,这将是一个坏主意.
您有什么推荐的吗?我正在寻找最直接的方法.
编辑:StreamHub似乎很好,但社区版只允许10个并发用户.
我一直在进行基于网络的聊天,类似于Facebook聊天.在当前状态下,我会监听传入聊天并检查现有聊天中的新消息是做...
setTimeout(function() { listenForIncomingChat() }, 500);
setTimeout(function() { checkForIncomingMessages( ...params... ) }, 500);
Run Code Online (Sandbox Code Playgroud)
...这样做setTimeout()
确保这些功能始终在运行.根据我打开的聊天窗口的数量,Firebug的控制台可能会疯狂地使用POST
s到服务器:)
显然这是非常低效的,但这是我能让事情发挥作用的唯一方式.现在我正在寻找让它变得更好的方法,正确地做到这一点!
现在,我听说过Comet Programming,这是与服务器打开长期HTTP连接的方法,但我不熟悉Comet背后的技术或思想.用于HTML5的WebSockets可能更好,但由于没有全面展开,也不是所有浏览器都支持,我会坚持使用的方法.
根据维基百科,有几种使用Comet风格开发的方法:Streaming(隐藏的iFrame,XMLHttpRequest)或带有长轮询的AJAX(XMLHttpRequest,Script标签).但是,我对此一无所知.我也读过有关AJAX推送引擎(APE)的内容,看起来很酷,但我暂时不想使用第三方.
我最近偶然发现了WebChat 2.0,所以我将通过源代码来查看它是如何工作的.
那么在哪里可以找到有关如何开始使用此类项目的示例代码/教程?我如何实施Comet技术?如何设置与服务器的长期HTTP连接?
在我对websockets的持续好奇心中,我注意到了一个趋势:
至少在目前,websocket宇宙的"hello world"似乎是"回声"功能.也就是说,演示的应用程序通常是"我送东西,我收到的东西."
虽然恰当地证明了协议是有用的,但这个例子实际上只展示了传统请求/响应周期所能实现的相同类型的通信.
例如,我可以找到twisted.web.websockets的唯一演示(在服务器端)如下:
import sys
from twisted.python import log
from twisted.internet import reactor
from twisted.web.static import File
from twisted.web.websocket import WebSocketHandler, WebSocketSite
class Echohandler(WebSocketHandler):
def frameReceived(self, frame):
log.msg("Received frame '%s'" % frame)
self.transport.write(frame + "\n")
def main():
log.startLogging(sys.stdout)
root = File(".")
site = WebSocketSite(root)
site.addHandler("/ws/echo", Echohandler)
reactor.listenTCP(8080, site)
reactor.run()
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
我怎样才能在这里检查"推送"功能?也就是说,我如何让Web套接字保持打开状态,然后在某个时间由某些事件的发生决定,通过websocket发送消息,其内容也受此事件的影响?
(那些对这个问题感兴趣的人也可能会认为这个问题引起了我几天前提出的问题:使用websockets和python/django进行移动(/ twisted?))
我正在实现典型的服务器推送(彗星)应用程序.我在两个选项中进行选择:longpoll XHR和iFrames.这些的优点和缺点是什么?我知道跨站点限制,iFrame是非常重量级的组件......还有其他差异吗?例如,运输的"可靠性"或对组件的控制水平?您如何看待,是否有一个正确的答案哪种方法更好或者两者都有用例?
提前致谢.
PS我有一个非常好的XHR实现工作,但我想考虑替代方案.
我想使用Redis的pubsub功能来实现彗星,但pubsub没有超时,所以如果我ps.listen()
,它会阻止,即使客户端关闭浏览器.
greenlet在生成进程时具有超时功能.但我不知道如何将它们组合在一起.
烧瓶的假
@app.route('/')
def comet():
rc = redis.Redis()
ps = rc.pubsub()
ps.subscribe('foo')
for item in ps.listen():
if item['type'] == 'message':
return item['data']
# ps.listen() will block, so how to make it timeout after 30 s?
Run Code Online (Sandbox Code Playgroud) 我最近学习了scala并即将开始工作/学习Lift框架.通过功能并开始使用框架,我已经看到了框架的一些惊人功能,包括反向ajax和彗星.在我的经验早期,对于从未缩放的反向ajax,我确实遇到了非常糟糕的经历.如果我为任何开发选择提升框架,这将是原因.我的问题是技术和产品的成熟程度以及在tomcat上使用lift的可扩展性有多大?与servlet规范3.0相比哪一个更好用于此目的,等待servlet规范3.0或开始使用lift?
我正在考虑编写一个需要能够将消息推送到浏览器的实时Web应用程序.当我第一次阅读Comet时,由于浏览器支持较弱,人们似乎认为这是一种脆弱而不成熟的方法.今天,它似乎是一种既定的实用技术.但据我所知,浏览器不支持基本方法(长轮询,iframe和脚本标签),现在比06年该想法最初流行时更好.
当然,在服务器端管理所有这些连接很困难,但是Comet框架解决了这个问题(即使在06年使用像Twisted这样的东西也是如此).那么交易是什么:在浏览器中Comet支持是否存在任何突破性问题,或者那些人当时是错误的?
另外:我最近阅读了一篇〜2010年的博客文章,总结了Comet技术的状态,详细介绍了每种方法.这听起来好像没有一种方法真的可行.这个帖子非常有说服力,这就是为什么我对Comet仍然很敏感.关于博客,我唯一记得的是它有一个深色背景(棕色或黑色).还有其他人看过那篇帖子吗?我真的很想再看一遍.