【问题标题】:High level Python library for using Websocket and Comet "fallback" transparently透明地使用 Websocket 和 Comet “回退”的高级 Python 库
【发布时间】:2014-04-02 04:30:05
【问题描述】:

我正在寻找用于建立与 Web 服务器的 HTTP 连接的高级 Python 库。 理想情况下,连接应该保持打开(持久)以发送和接收双向消息,所以 Websocket 对我来说很棒。 由于我希望它与大多数 HTTP 代理兼容,因此我考虑使用 HTTP 轮询(Comet 样式)的“后备”模式。

我的问题是我找不到透明地管理这两种连接的库。理想情况下,我会使用其中一种技术(Websocket 或 Comet)建立与服务器的连接,然后对两种类型的连接使用相同的函数简单地发送/接收消息。

为此,我找到了许多 Python 服务器 和一些 Js 客户端,但在 Python 中没有。 我看了:Twisted、Tornado、ZeroMQ、py4ws

【问题讨论】:

    标签: python websocket client comet abstraction


    【解决方案1】:

    我认为 Python Socket-IO 客户端可能是一个很好的解决方案: https://github.com/invisibleroads/socketIO-client

    他可以使用相同的范例轻松地与 Socket.io NodeJs 服务器交互。

    我测试了它,它可以默认使用 Websocket 连接和回退到 xhr-polling,这很棒(我实际上通过代理测试了这个功能)。

    例子:

    with SocketIO('http://127.0.0.1', 7777, Namespace, transports=["websocket", "xhr-polling"], proxies={'http': 'http://localhost:8888'}) as socketIO:
        socketIO.on('foo',some_callback_function)
        socketIO.emit('bar')
        socketIO.wait()
    

    【讨论】:

      【解决方案2】:

      你看过socket.io吗?它主要与 websockets 一起使用,但有很多回退,因此 应该 被所有浏览器支持。

      对于服务器端,我使用了flaskgevent-socketio。 Miquel Gringberg 最近发布了flask-socketio 扩展,这是一个很好的抽象,用于使用 flask 和 gevent-socketio。 Gevent-socketio 建立在漂亮的 gevent 库之上。

      gevent-socketio 应该可以与其他 Python 框架配合使用,例如 Django 和 Bottle。

      我不完全确定这是否符合您的要求,但可能值得一看。

      【讨论】:

      • 感谢您的回答。我实际上查看了 socket.io,并将它(或基于它的框架)用于服务器部分。我的问题是我还需要一个客户端(不是浏览器)来执行一些任务。 NodeJs(socket.io-client)似乎是可能的,但我正在寻找一个 Python 库,因为我认为它更容易被其他程序员维护并且更容易分发
      • 您需要执行哪些此组合无法完成的任务?
      • 这需要一个客户端,是的,还有 javascript 来处理浏览器端代码,但它完全抽象了传输层。连接到 socket.io-endpoint 后,您在服务器端所做的一切都由相同的函数处理。我不确定纯 python 中是否存在一个 HTTP 库。
      • 我想我确实找到了解决方案。我会在这里发布答案。感谢您的建议
      猜你喜欢
      • 1970-01-01
      • 2013-05-07
      • 1970-01-01
      • 2014-09-14
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 2014-06-16
      • 2014-10-27
      相关资源
      最近更新 更多