Django TCP服务器与龙卷风

时间:2017-11-21 03:22:32

标签: python django sockets tcp tornado

我希望我的django应用程序通过使用TCP / IP套接字与远程计算机进行通信,我希望该套接字始终可用。我想使用库龙卷风。由于我只熟悉编写视图和模型等,我不完全确定将其放入我的代码库中。

我正在考虑编写一个运行龙卷风服务器的管理命令(参见http://tornado.readthedocs.io/en/latest/tcpserver.html),但是一旦管理命令退出,我怎么能在服务器上调用.stop()?我不希望它产生任何在我的管理命令退出时不会退出的线程,或最终有多个打开的套接字,因为我只想要一个。

当然我也希望监听器驻留在我的django程序中的某个地方并且可以访问它,而不仅仅是在管理命令代码中。我正在考虑从django的设置中导入一个类。

我是在思考正确的方向,还是有更好的方法?

编辑:至于我为什么要这样做:

我有一个我想要与之通信的微控制器,我不想在其上实现/解析HTTP,我还想定期发送一些关于连接存在的指示,并且HTTP没有'好像是要走的路

1 个答案:

答案 0 :(得分:0)

管理命令是一种很好的方法,但我不愿意使用它来启动服务器。龙卷风服务器是一个复杂的事情,有很多状态(包括代码库之外的状态,如nginx,apache或HAProxy)和不同的健康状况。管理命令并非旨在解决所有这些问题。

对于开发来说,它可能是一件好事,在这种情况下,您可以通过在命令内部调用IOLoop.current().start()轻松地使管理命令不在服务器之前退出。

对于生产环境,我建议使用Docker Compose等现代编排工具,或者如果您打算跨多台计算机,Docker Swarm或Kubernetes使用系统。这些工具允许您以可靠的方式启动,关闭,缩放和检查各个组件的运行状况,而无需使用一组管理命令重新发明轮子。

无论哪种方式,如果您的Tornado代码与Django位于同一个地方,那么您重新able to access the database using your Django models并重用项目的其他部分。除此之外,在管理命令doesn't get any advantages中使用正在运行的Django服务器启动了一些东西。

相关问题