twisted - Ruby EventMachine、Python Twisted 或 JavaScript Node.js 的意义/目的是什么?

标签 twisted nonblocking node.js eventmachine

我不明白这些框架解决了什么问题。它们是 Apache HTTPD、Tomcat、Mongrel 等 HTTP 服务器的替代品吗?或者他们更多?我为什么要使用它们……一些真实世界的例子?我见过无数的聊天室和广播服务的例子,但看不出这与设置一个 Java 程序以打开套接字并为每个请求分派(dispatch)一个线程有什么不同。

我想我了解非阻塞 I/O,但我不明白这与多线程 Web 服务器有何不同。对于 Node.js,我读到它只有一个线程,这可能比同时处理多个线程更有效,但这是这些框架与传统 Web 服务器之间的唯一区别吗?

最佳答案

如果您想编写网络代码,您可以使用这些框架之一。

例如,如果您要写 a massively multiplayer video game ,“设置一个Java程序......为每个请求分派(dispatch)一个线程”可能不是一个选项;处理这么多线程非常复杂,而且性能也很差。更不用说“只产生一堆线程”缺少一堆 Twisted 等管理工具的事实。人。有,如 twistd,它处理日志记录、守护进程、启动和关闭等。

或者如果你想写一个 build automation system , 能力 asynchronously invoke and control subprocesses会有用的。如果您异步生成一个进程,您可以轻松地终止该进程并优雅地处理它的退出。如果您通过启动一个线程并在该线程中阻塞来生成它,您将无法轻易停止它,因为 stopping a thread is inherently unsafe .

EventMachine 和 Twisted 都可以用来编写客户端程序;也许您正在编写一个不基于 Web 的 GUI 应用程序,并且您希望在客户端和服务器上使用相同的协议(protocol)实现。

由于您可以在许多不同的上下文中使用异步框架,您可能只想在 Web 应用程序中使用它,因为您有现有的库代码,使用您的异步框架为其他应用程序编写,您想要利用。或者您可能希望能够在一些假设的 future 非 Web 应用程序中重用您的 Web 应用程序代码。在这种情况下,它与使用 Apache 或 Tomcat 或其他任何功能没有太大区别,它只是为您提供了一种更通用、可重用的方式来组织您的程序。

关于twisted - Ruby EventMachine、Python Twisted 或 JavaScript Node.js 的意义/目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2933608/

相关文章:

asynchronous - 在 Dart 中获取非阻塞 stdin 数据

javascript - TypeError : http. listen 不是一个函数:NodeJS

python - 将异步扭曲代码集成到同步 python 代码中

java - java的扭曲矩阵框架

java - 在 Spring 4 中运行并行线程的优雅方式

c - read() 是否位于 Linux(OSX、FreeBSD)以外的平台上的非阻塞套接字 "greedy"上?

node.js - 在 aurelia js 中安装项目依赖项时出错

node.js - 如何在Electron-Forge中成功高效地安装SQLite3?

python - Twisted Deferred 在没有 errback 的情况下不显示未处理的异常

python - 每天使用 twisted 重置 redis 键