Python's Bottle&长轮询?

时间:2012-10-29 02:52:22

标签: python jquery long-polling bottle

我目前有一个单页的Bottle项目通过localhost:8080

出于这个问题的目的,假设单个页面是无效的,而是基本的短轮询聊天,从Python中检索仅包含发件人姓名和消息正文的聊天对象。

这些聊天对象存储在聊天对象中,项目允许多个聊天。

聊天和发件人由网址决定。例如,如果从localhost:8080/chat/23/50发送聊天行,则会将其作为发件人50发送到聊天23,localhost:8080/chat/23/*将在基本overflow:auto div中显示聊天23的所有聊天行。

当前的短轮询AJAX每秒从Python请求一次数据。我想让事情变得更加实时,并决定采用长轮询(尽管如果你喜欢HTML5 WebSockets,我也不介意了解它们。)

我的问题分为两部分:

  1. 如何在这样的聊天系统中实现长轮询方法,最好还是在使用Python的Bottle模块时?
  2. 我如何通过外部可访问的实际服务器(即,不仅来自localhost)交付项目?即使通过局域网提供它也会很好。
  3. 我知道长轮询会导致像Apache这样的服务器出现严重的性能问题,并且如果可以将这个事实考虑在任何答案中,我们会很感激。我希望尽可能扩展解决方案。

    感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

我最近参加了一个关于实时客户端 - 服务器应用程序的演示文稿,该应用程序充分利用了Python /服务器端的gevent和客户端的socket.io。演讲者Alexandre Bourget发布了a gevent-socketio module ongithub,可以用来使所有的管道更容易。

一切只能使用HTTP长轮询(但socket.io包含切换到HTML5 WebSocket或Flash套接字的所有逻辑)。虽然框架是金字塔,但我相信它也适用于Bottle!

答案 1 :(得分:1)

我没有试过自己,但我认为你可以和Tornado一起使用瓶子http://www.tornadoweb.org/(见Tornado - mount Bottle app)。

可以使用龙卷风进行长轮询。查看tornadio项目https://github.com/mrjoes/tornadio

您可能也对http://pypi.python.org/pypi/bottle-tornado-websocket感兴趣。我从来没有使用过这个,但它看起来像你正在寻找的东西。

Tornado doc有一个关于在生产中运行的部分:http://www.tornadoweb.org/documentation/overview.html#running-tornado-in-production

我希望它有所帮助