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)时不终止进程轮询,你的服务器仍然可以接受连接。