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

Ras*_*ash 4 python client-server python-3.x

因此,我创建了一个应用程序,其中该应用程序连接到服务器并告诉它执行某些操作。但是,服务器需要大量时间来完成该操作(例如一个小时左右)。因此,将客户端长时间连接到服务器没有任何意义。我希望服务器必须创建与客户端的连接,以告知他已准备好交付最终结果。然后,在连接之后,他将数据发送到客户端。

我在这里想两个想法:

  1. 我也可以在客户端上创建服务器,并且客户端可以侦听服务器连接。但是,我的客户通常是一些资源有限的桌面应用或移动应用,其中一些还位于防火墙/ NAT之后。因此,即使他们正在运行服务器,我也不确定我的主服务器是否能够连接到它们。

  2. 客户可以定期检查结果是否准备就绪。这样,客户端不必维护任何服务器或任何东西。它将是普通的旧客户端服务器体系结构。但这会浪费大量不必要的流量,因为结果可能会在几分钟到几小时内出现。客户端不断固定服务器对我来说似乎并不好。

我首先不知道从哪里开始或用谷歌搜索这些东西。我知道存在这种情况是因为我经常看到诸如“ Skype”之类的服务器通知我的桌面应用程序我有新朋友请求,或者是Gmail通知系统,其中Google会在收到新邮件时在我的桌面上显示一条消息。

大多数Google搜索在客户端连接到服务器时会产生相同的内容。但是这里的情况恰恰相反。

如果这个问题不符合标准,那么一些参考文献也不错,我将删除此帖子。我很可能没有在思考并且变得愚蠢。请帮忙。谢谢。

Ras*_*ash 5

因此,在研究了许多相关文章之后,我想出了以下内容。

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

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

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

但是,对于服务器到应用程序的推送(这是我的要求),确实有两件事:

  1. Redis发布/订阅:redis中发布/订阅通道的功能很棒。您要做的就是向客户端订阅服务器中的频道,并且只要服务器发布内容,客户端就会自动监听。Redis被广泛使用,维护良好,易于使用,并且设计用于超大型应用程序。我喜欢那个。
  2. 亚马逊SNS。现在像我这样的人(我忘记在问题中提到的是,我正在使用亚马逊作为服务器)使用亚马逊aws,此功能SNS(简单通知系统)专为服务器到应用程序推送而设计。它便宜,易于实现,并带有python库。因此,如果您不想使用Redis,只需使用Amazon的此简单工具即可将数据推送到客户。如果需要,它还支持将数据直接推送到SQS(简单队列服务)。

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

更新:

需要服务器推送吗?忘记其他所有内容,并使用Redis + Socket-IO + Node-JS。我怎么不知道Websockets。第二好的。

在我的应用程序中,我只是向Redis发送任何要推送给客户端的消息。Redis发布这些消息。Socket.IO正在使用以下方法监听频道psubscribe用于侦听模式,而不是侦听一个通道。用户类别由通道名称定义。

一旦socket.io(用node.js编写)听到了该消息,它只会将emit这些消息发送给客户端。客户端依次在特定端口上监听socket.io。Socket.io支持roomschannel在。

对于实时示例,仅使用google real time chat with socket.io and node.js

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