gpt4 book ai didi

python - 服务器如何启动与客户端的连接

转载 作者:行者123 更新时间:2023-12-04 18:06:16 24 4
gpt4 key购买 nike

所以我创建了一个应用程序,该应用程序连接到服务器并告诉它做某事。但是服务器需要很多时间来做这件事(比如一个小时左右)。因此,长时间将客户端连接到服务器是没有意义的。我希望服务器必须创建与客户端的连接,以通知他已准备好交付最终结果。然后在连接后,他将数据发送给客户端。

我在这里想两个想法:

  • 我也可以在客户端创建一个服务器,客户端可以监听服务器连接。然而,我的客户通常是一些资源有限的桌面应用程序或移动应用程序,其中一些也位于防火墙/NAT 后面。因此,即使他们正在运行服务器,我也不确定我的主服务器是否能够连接到他们。
  • 客户可以定期检查结果是否准备好。这样客户端就不必维护任何服务器或任何东西。它将是普通的旧客户端服务器架构。但这花费了我很多不必要的流量,因为结果可能会在几分钟到几小时内提供。一个不断固定服务器的客户端对我来说似乎不太好。

  • 我首先不知道从哪里开始或谷歌这些东西。 我知道这样的事情存在,因为我一直看到诸如“Skype”之类的服务器通知我的桌面应用程序我有一个新的 friend 请求,或者谷歌在收到新邮件时在我的桌面上显示一条消息的 gmail 通知系统。

    大多数谷歌搜索都会产生客户端连接到服务器的相同内容。但这里的情况正好相反。

    如果这个问题不符合标准,一些引用也很好,我会删除这个帖子。很有可能我只是没有思考某些事情并且很愚蠢。请帮忙。谢谢。

    最佳答案

    所以在我研究了很多相关文章之后,这就是我想出的。

    这些链接描述了所谓的“服务器推送”,它基本上将数据从服务器推送到客户端。这里讨论了多种方法。我的第 2 点实际上非常接近解决方案,第 2 点的术语称为长轮询。

  • http://en.wikipedia.org/wiki/Push_technology
  • http://mrjoes.github.io/2013/06/21/python-realtime.html
  • http://flask.pocoo.org/snippets/80/

  • 但是这两篇文章中讨论的方法都是关于将数据推送回 Web 浏览器。在某些情况下,该解决方案可以扩展到移动客户端中的服务器推送,但我仍在阅读它们,所以不能发表太多评论。

    但是,对于服务器到应用程序的推送,这是我的要求,有两件事真正站起来了:
  • Redis Pub/Sub:redis 中 pub/sub channel 的功能非常棒。您所要做的就是将客户端订阅到服务器中的 channel ,并且只要服务器发布某些内容,客户端就会自动收听。 Redis 被广泛使用,维护良好,易于使用,并且专为非常大规模的应用程序而设计。我喜欢那个。
  • 亚马逊社交网络。现在像我这样的人(我忘了在问题中提到,我使用亚马逊作为我的服务器)使用亚马逊 aws,这个功能 SNS(简单通知系统)是为服务器到应用程序推送而设计的。它便宜、易于实现,并附带 python 库供使用。因此,如果您不想进入redis,只需使用亚马逊的这个简单工具将数据推送给您的客户。如果您需要,它还支持将数据直接推送到 SQS(简单队列服务)。

  • 我目前已决定使用 Amazon SNS,并将继续学习 Redis,以备将来使用。

    更新:

    需要服务器推送吗?忘记其他一切,使用 Redis + Socket-IO + Node-JS。我怎么不知道 Websockets。它是下一个最好的事情。

    在我的应用程序中,我只是将任何想要推送给客户端的消息发送到 Redis。 Redis 发布这些消息。 Socket.IO 正在使用 psubscribe 监听 channel 听模式而不是一个 channel 。用户类别由 channel 名称定义。

    一旦 socket.io(用 node.js 编写)听到消息,它只是 emit这些消息给客户端。客户端反过来在特定端口上监听 socket.io。 Socket.io 支持 rooms喜欢 channel在redis中。

    对于现场示例,只需 google real time chat with socket.io and node.js .

    如果有人要求我,我也会写一些例子。它真的很容易。

    关于python - 服务器如何启动与客户端的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26919310/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com