1

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

对于这个问题,假设单页只是一个基本的短轮询聊天,从 Python 中检索聊天对象,其中只包含发送者的姓名和消息的正文。

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

聊天和发件人由 URL 确定。例如,如果一条聊天线是从 发送的localhost:8080/chat/23/50,它将作为发送者 50 发送到聊天 23,并将localhost:8080/chat/23/*在基本overflow:autodiv 中显示聊天 23 的所有聊天线。

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

我的问题分为两部分:

  1. 我将如何在这样的聊天系统中实现长轮询方法,最好还是使用 Python 的 Bottle 模块?
  2. 然后,我将如何通过可从外部访问的实际服务器(即,不仅从本地主机)交付项目?即使通过 LAN 提供它也很好。

我知道长轮询可能会导致 Apache 等服务器出现严重的性能问题,如果可以将这一事实纳入任何答案,我将不胜感激;我想要一个尽可能可扩展的解决方案。

任何帮助表示赞赏!

4

2 回答 2

2

我最近参加了一个关于实时客户端-服务器应用程序的演示,该应用程序充分利用了 Python/服务器端的gevent和客户端的socket.io。演讲者 Alexandre Bourget 在 github 上发布了一个 gevent-socketio 模块,可用于简化所有管道。

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

于 2012-10-29T03:04:39.653 回答
1

我没有尝试过,但我认为您可以将瓶子与 Tornado 一起使用http://www.tornadoweb.org/(请参阅Tornado - mount Bottle 应用程序)。

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

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

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

我希望它有帮助

于 2012-10-29T05:39:02.470 回答