繁体   English   中英

带有龙卷风的Django TCP服务器

[英]Django TCP server with tornado

我希望django应用程序通过使用TCP / IP套接字与远程计算机进行通信,并且希望该套接字始终可用。 我想使用图书馆龙卷风 由于我只熟悉编写视图和模型之类的东西,因此我不确定要在哪里适合我的代码库。

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

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

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

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

我有一个要与之通信的微控制器,并且我不想在其上实现/解析HTTP,并且我还想定期发送一些有关连接是否仍在运行的指示,而HTTP似乎不是要走的路

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

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

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

无论哪种方式,如果Tornado代码与Django都位于同一位置,那么您就可以使用Django模型访问数据库并重用项目的其他部分。 除此之外,从管理命令启动的内容在使用运行中的Django服务器方面没有任何优势

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM