Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有可能在普通客户端上实现Webhook吗?_Python_Sockets_Real Time_Long Polling_Webhooks - Fatal编程技术网

Python 有可能在普通客户端上实现Webhook吗?

Python 有可能在普通客户端上实现Webhook吗?,python,sockets,real-time,long-polling,webhooks,Python,Sockets,Real Time,Long Polling,Webhooks,我正在尝试创建一个python应用程序,它可以连续地从Web服务器接收数据。这个python应用程序将在多台个人计算机上运行,只要有新的数据可用,它就会收到它。我意识到我可以通过长轮询或web套接字来实现这一点,但问题是,有时数据会在几天内无法传输,在这种情况下,长轮询或web套接字似乎效率低下。我不需要那么长时间的连接,但只要数据可用,我就需要能够将其推送到应用程序。我一直在读关于Webhook的文章,似乎如果我能有一个url来发布数据,我就不需要投票了。但我对每个客户端如何拥有回调url感到

我正在尝试创建一个python应用程序,它可以连续地从Web服务器接收数据。这个python应用程序将在多台个人计算机上运行,只要有新的数据可用,它就会收到它。我意识到我可以通过长轮询或web套接字来实现这一点,但问题是,有时数据会在几天内无法传输,在这种情况下,长轮询或web套接字似乎效率低下。我不需要那么长时间的连接,但只要数据可用,我就需要能够将其推送到应用程序。我一直在读关于Webhook的文章,似乎如果我能有一个url来发布数据,我就不需要投票了。但我对每个客户端如何拥有回调url感到困惑,因为在这种情况下,客户端必须充当服务器。是否有任何库可以帮助完成此任务?任何你能给我指出的资源都会非常有用

32

你要做的是仔细阅读。本质上,您的客户机将对特定资源执行POST请求,让我们调用资源
客户机
。然后,您的客户机可以执行对“/:cliend_id”的GET请求,当这种情况发生时,您的后端可以继续将此信息持久化到数据库中

python中有许多RESTful web框架,其中一些流行的是和

Python日记中的这篇文章名为“”,共享的这张幻灯片名为“”,将教您编写RESTful web服务所需的知识,该服务具有基本的(C)创建(R)ead(U)更新(D)elete功能

在客户端,您需要担心的是,确保您收到的是200 back,这将向您的客户端发出信号,表明它成功地执行了对后端服务的请求,并且如果您执行了POST/PUT,则所有内容都被持久化。如果它没有返回200,那么您可以添加处理故障、冗余和容错的功能


如果您有任何问题,请告诉我

如果没有某种连接,例如WebSocket或(长)轮询,则无法向客户端发送数据。虽然理论上可以在客户机上打开一个侦听器套接字,让web服务器可以连接到该套接字并将数据发送到该套接字,但实际上这是行不通的。出现这种情况的主要原因是,客户机通常位于无法从外部访问的内部网络内,即一个IP后有多台计算机的典型家庭设置或中间有防火墙的公司设置。在这种情况下,只能从内部到外部建立连接,但不能以其他方式建立连接。

谢谢您的回答,但这与长时间轮询有什么不同?因为我仍然会让客户端定期转到“/:cliend_id/results”,以检查数据是否可用,对吗?另外,我希望后端将数据发布到url,然后客户端可以接收到这些数据!在长轮询中,如果服务器在收到轮询时没有任何可供客户端使用的信息,则服务器不会发送空响应,而是保持请求打开并等待响应信息变为可用。在我的建议中,您可以简单地将客户端设置为定期检查服务器上的资源(可以是每小时、每6小时、每天),就这样。如果可用,则将其发送给您的客户端,如果不可用,则等待下一个客户端请求。您实际上是在构建发布/订阅服务,但在这种情况下,保持套接字打开的费用是不值得的,因为实际上不必实时执行任何操作。如果您还有其他问题,请告诉我!