Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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
从视图看Django套接字通信_Django_Sockets_Queue_Freeswitch - Fatal编程技术网

从视图看Django套接字通信

从视图看Django套接字通信,django,sockets,queue,freeswitch,Django,Sockets,Queue,Freeswitch,我有一个应用程序,其中请求到达Django视图,需要通过socekt与Freeswitch通信。我希望套接字已经打开,因为我需要先进行身份验证等,并持有某种队列,所有视图都将使用该队列将请求推送到该套接字中并获得结果 在哪里可以初始化这种套接字/队列?我应该使用芹菜和消息队列之类的东西来解决这个问题吗?这取决于(我想这么说…)但说真的,要设计这样一个体系结构,需要分析很多因素,主要是因为这里有两个问题: 来自自由开关的响应速度 将查询排队到freeswitch 如果您将有一个进程来处理所有请

我有一个应用程序,其中请求到达Django视图,需要通过socekt与Freeswitch通信。我希望套接字已经打开,因为我需要先进行身份验证等,并持有某种队列,所有视图都将使用该队列将请求推送到该套接字中并获得结果

在哪里可以初始化这种套接字/队列?我应该使用芹菜和消息队列之类的东西来解决这个问题吗?

这取决于(我想这么说…)但说真的,要设计这样一个体系结构,需要分析很多因素,主要是因为这里有两个问题:

  • 来自自由开关的响应速度
  • 将查询排队到freeswitch
如果您将有一个进程来处理所有请求,并且零并发-那么根本没有问题-您将在整个程序运行期间保持一个套接字打开,并在需要时重新打开。但这是不真实的情况

如果只能打开一个套接字,则必须有一个请求队列。这意味着,您的所有django代码都必须是异步的,您的应用程序不能等待答案,只需简单地检查任务的状态

芹菜可以在这里使用,但它不是为了保持套接字打开而设计的,因为芹菜本身可能会产生多个工作进程,所以它们不能轻松地在它们之间共享套接字。使用线程、greenlet等可能会有所帮助,但这并不是为了保持连接打开

因此,您将得到的是编写您自己的守护程序,我建议将其作为管理命令编写,它可以管理这样的连接并从主应用程序接收数据。 在这种情况下,您必须实现一个队列,所以不需要芹菜。

这取决于(我喜欢这么说…)但认真地说,要设计这样一个体系结构,您需要分析很多因素,主要是因为这里有两个问题:

  • 来自自由开关的响应速度
  • 将查询排队到freeswitch
如果您将有一个进程来处理所有请求,并且零并发-那么根本没有问题-您将在整个程序运行期间保持一个套接字打开,并在需要时重新打开。但这是不真实的情况

如果只能打开一个套接字,则必须有一个请求队列。这意味着,您的所有django代码都必须是异步的,您的应用程序不能等待答案,只需简单地检查任务的状态

芹菜可以在这里使用,但它不是为了保持套接字打开而设计的,因为芹菜本身可能会产生多个工作进程,所以它们不能轻松地在它们之间共享套接字。使用线程、greenlet等可能会有所帮助,但这并不是为了保持连接打开

因此,您将得到的是编写您自己的守护程序,我建议将其作为管理命令编写,它可以管理这样的连接并从主应用程序接收数据。
在这种情况下,您必须实现一个队列,因此不需要芹菜。

好的,听起来是编写我自己的deamon的好方法,但是我如何接受来自主应用程序的数据?如何向视图公开我的队列?例如,表或任何其他存储,您可以使用外部队列解决方案(amqp)-看看kombu/django kombu Thx Jerzyk!您是否有任何快速指针来实现作为守护进程的管理命令?当然:从django.utils.daemonize导入成为_Daemon:D并查看django代码本身:django/core/servers/fastcgi.pyOK,听起来是编写我自己的deamon的好方法,但是我如何接受来自主应用程序的数据呢?如何向视图公开我的队列?例如,表或任何其他存储,您可以使用外部队列解决方案(amqp)-看看kombu/django kombu Thx Jerzyk!您是否有任何快速指针可以将管理命令实现为守护进程?当然:从django.utils.daemonize导入成为_Daemon:D并查看django代码本身:django/core/servers/fastcgi.py