DSP

Eventmachine介绍

2019-07-13 15:09发布


EventMachine提供了一个能实现Ruby程序通过网络与其他进程进行通讯的快速的、轻量级的框架。使用EventMachine,ruby程序 员可以非常容易的连接远程服务器或者作为自身开发服务器。EventMachine不会取代Ruby的IP库。它为那些需要更好性能、可扩展性以及比网络 接口(network sockets)更有规律的应用程序提供了一种技术选择。通过使用内置的库,它将变得非常简单,特别是在开发事件驱动编程模型上非常适合。

EventMachine提供了一个永久的事件轮询(event-loop)。在轮询过程中,TCP网络连接是被初始化的(initiated)和可接受 的(accepted),应用程序可以调用EventMachine的方法。也可以定义事件的回调方法,在事件轮询中当定义的事件发生 时,EventMachine会调用这个回调方法。

当下面事件发生时,将发生回调: * 当事件轮询接受远程的网络连接时
  * 当从网络连接接收数据时
  * 当连接被关闭时,不管是本地或远程的
  * 当用户指定的定时器过期时


示例

这是怎么回事?好,我们定义了EchoServer模块实现echo协议的语法。最后3行调用的是event-machine自身,它将一直运行,除非你 在回调中终止它。
在EveentMachine::run中包含的块是在event machine初始化之后以及开始轮询前执行的。在这里将根据指定的ip地址和端口打开一个TCP服务器并侦听,连同将处理数据的模块。

那么EchoServer模块做什么用?好,每个网络连接启动时,EventMachine都会分配一个匿名类,你的模块将被混合进去。确切的说为每个连 接创建一个类实例。当一个连接的某个事件发生时,它会自动调用相应对象的实例方法,你可以在模块中重定义。在你的模块代码总是在一个类的实例的上下文中运 行,所以如果你希望,那么你可以创建实例变量,他们可以在同一个连接的其他回调中使用。

提示:连接关闭(close_connection)时不终止进程轮询,你的服务器仍然可以接受连接。