使用以下技术实现异步的方法的概念差异是什么。我的主要搜索是 Django,但我正在寻找一个描述技术背后想法的概念性答案。
- Socket.IO 和 gevent
- 网络套接字
- RabbitMQ & 芹菜
我在网上找到了关于大多数这些方法的教程,但是它们没有解释背后的概念,只是技术实现。
使用以下技术实现异步的方法的概念差异是什么。我的主要搜索是 Django,但我正在寻找一个描述技术背后想法的概念性答案。
我在网上找到了关于大多数这些方法的教程,但是它们没有解释背后的概念,只是技术实现。
异步编程可能很难理解。基本思想是一种绕过阻塞 IO 的方法。阻塞 IO 是指写入文件、查询数据库、查询 REST API 以及在等待其他事情发生时会中断应用程序处理流程的任何事情。
比如说你构建了一个图库应用,用户可以上传高清大图来炫耀。但是您需要制作用户上传的这张大图像、缩略图、较小分辨率版本等的各种副本。要做到这一点需要一些阻塞 IO。您需要压缩图像,这非常密集,一旦压缩,您需要将它们写入磁盘,之后您可能需要将所有这些信息存储在数据库中。在一个请求中执行此操作会导致用户的性能非常缓慢,而且老实说,您的后端进程可能会在完成所有需要的任务之前超时。它也不能很好地扩展。
解决这个问题的一种方法是使用异步编程。用户上传完成后,您可以向其他应用程序发出各种信号,等待他们压缩图像或将数据写入数据库的机会。一旦发出信号,这些后台进程就会开始工作,您的用户不必坐下来等待很长的请求完成,而是可以继续浏览网站,喝杯咖啡并在制作缩略图时收到通知等等
在上面的示例中,我将使用 Celery、RabbitMQ 和 SocketIO(或者可能是 TornadIO)来实现它。一旦用户上传完成,我会启动一个 celery 任务,celery 使用 RabbitMQ(我更喜欢 Redis)来管理任务,你可以有 10、20、30 名 celery 工作人员在后台处理这些图像上传。一旦 celery 完成它的工作,它会向 Socket 服务器发送一条消息,用于处理用户浏览器也连接的 Web 套接字。这将实时向用户发送通知,告知他们上传的新图片现已准备好与全世界分享
这是围绕异步事件驱动编程的真正基本示例。无论如何,我最好理解它。其他人请纠正我。
我希望这有帮助。:)