【问题标题】:Python using the correct socketPython 使用正确的套接字
【发布时间】:2019-05-05 06:37:09
【问题描述】:

我正在使用 Google Cloud 和 Google App Engine,我希望我们的服务 API 之一使用socket 连接,而不是接收请求并在每次查询时发送一次响应的常规 HTTP 连接。

我需要这个套接字连接,以便在更新时将持续连接和当前数据流发送回用户。

我已经阅读了几份文档,Google App Engine 的套接字文档建议使用套接字库。但是在文档的底部,他们提供了一个使用带有套接字的 Google App Engine 的示例应用程序,但示例应用程序中的套接字是由 nntplib 而不是 socket 制成的。有多少 python 库可以制作/使用套接字,我应该使用哪个套接字进行这种连接。

它在 python 文档中说nntplib 用于实现新闻阅读器或海报,所以我不确定这是否是我应该使用的正确套接字连接类型,用于将在线用户的当前数据发送回前端用户结束。

https://docs.python.org/2/library/nntplib.html

我应该只使用

socket.socket()

编辑: https://cloud.google.com/appengine/docs/standard/python/sockets/#making_httplib_use_sockets

【问题讨论】:

    标签: python python-2.7 sockets google-app-engine websocket


    【解决方案1】:

    如果我很了解您需要的连接类型,Websockets 将是一个好主意,这样您就可以创建一个全双工通信通道。但是 Google App Engine (GAE) 还不支持 Websockets。根据post,它将很快为 GAE Flexible 实施。

    GAE 中有一个 Websockets 的功能请求,您可以在 link 中跟踪更新

    同时,如果您需要 Websockets,您必须使用 Compute Engine instances

    关于 GAE 中对 Sockets 的支持,您可以使用任何不违反here 列出的限制和限制的导入套接字的库(poplib、nntplib 等)。

    【讨论】:

    • 是的,我知道套接字也没有得到很好的支持,但我遇到了套接字 python API 文档,现在我已将其放入我的 OP 中。因此,根据该文件,它说可以使用套接字,但仅限于“出站连接”。不确定这是否是我发送用户在线状态实时更新所需要的。
    • @HenryLee 出站连接意味着您的应用必须启动套接字连接。通常,要执行您想要的操作,您必须创建一个侦听套接字(入站)到您的客户端将连接到的位置,然后将数据发送给他们。这样一来,我认为您无法通过在 GAE 中使用套接字来实现。
    • 好的@dhauptman,这是否意味着我可以创建一个“客户端”套接字?我有一个来自第三方服务的 API/URL,它已经是一个 Websocket 连接(https://www.thirdPartyURL.com //This is their websocket ip)。你知道我是否可以只使用 Python 套接字连接到这个 IP 并订阅它吗?由于这个 URL 已经是一个 websocket,我想我不需要创建自己的套接字服务器,而只需创建一个客户端套接字来订阅这个?此 URL 返回用户在线状态。如何使用 GAE webApp2 从这个 Websocket 获取实时更新?
    • 老实说,我不确定 websocket 是否能够将套接字连接升级为 websocket 连接。如果可以考虑不同的方法,您可以查看Server-sent events 方法,该方法仅适用于服务器到客户端,更接近您的需要,与 websockets 上的双向通道不同。有一个很好的 article 关于这个,你可以看看。
    • 如果您对另一种不同的方法感到满意,您可以考虑使用Cloud Pub/Sub
    【解决方案2】:

    我的初衷是不使用任何额外的服务或费用,例如 @dhauptman 建议的许多伟大的服务或费用,但根据 Google App Engine docs for sockets (Python 2.7) 似乎是这样的: Python Sockets Google App Engine

    似乎因为套接字只支持出站套接字,我可以创建一个带有订阅事件的套接字连接,并且每当事件发生和更新时,只需查询 API 以获取任务处理程序并将其作为响应发送回来。

    另一种选择是使用 httplib 库而不是 Google App Engines urlfetch。使用 httplib 库时,可以在 app.yaml 文件中配置为使用套接字连接。这将克服达到 urlfetch 限制的问题。

    【讨论】:

      猜你喜欢
      • 2011-06-29
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 2014-05-27
      • 2018-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多