Reactor pattern的实现目前有如下几个 写道
Implementations
The ADAPTIVE Communication Environment (C++)
xSocket (Java)
Apache MINA (Java)
POE (Perl)
Twisted (Python)
EventMachine (Ruby)
JE中有篇文章介绍了Eventmachine,请参见
http://dustin.iteye.com/blog/223664
服务端:
硬件:DELL1950,2*4CPU,8G内存
操作系统:
引用
[root@PerfTestApp3 ~]# uname -a
Linux PerfTestApp3 2.6.9-67.ELsmp #1 SMP Wed Nov 7 13:58:04 EST 2007 i686 i686 i386 GNU/Linux
服务端EM的代码:
require 'rubygems'
require 'eventmachine'
module Echo
def receive_data data
send_data data+"-Agent : EventMachine"
puts data
end
end
EM.run {
EM.start_server "0.0.0.0", 3080, Echo
}
服务端单进程方式启动
客户端:
Loadrunner直接请求,代码如下:
Action()
{
web_reg_find("Text=Hello!",
"Search=All",
LAST);
web_custom_request("EM", "Method=POST",
"URL=http://10.2.226.39:3080/",
"Body=Hello!" ,
LAST);
return 0;
}
TPS最高是1200,不稳定,如图:
TPS1200时的系统资源如下:
引用
top - 14:43:38 up 25 days, 3:55, 3 users, load average: 0.13, 0.25, 0.16
Tasks: 112 total, 1 running, 111 sleeping, 0 stopped, 0 zombie
Cpu(s): 4.1% us, 2.1% sy, 0.0% ni, 93.8% id, 0.0% wa, 0.1% hi, 0.0% si
Mem: 8306064k total, 7201996k used, 1104068k free, 236304k buffers
Swap: 2031608k total, 0k used, 2031608k free, 6028396k cached
PID USER PR NI %CPU TIME+ %MEM VIRT RES SHR S COMMAND
13011 alisoft 25 0 20 315:19.60 6.9 1543m 561m 51m S java
9565 root 16 0 20 2:38.57 0.1 15628 10m 2148 S ruby
9146 root 16 0 9 1:15.67 0.0 8860 2356 1844 S sshd
服务器的并发连接情况如下:
引用
[root@PerfTestApp3 ~]# netstat -an |grep 3080
tcp 0 0 0.0.0.0:3080 0.0.0.0:* LISTEN
tcp 0 292 10.2.226.39:3080 10.2.226.15:45249 ESTABLISHED
tcp 0 292 10.2.226.39:3080 10.2.226.15:45251 ESTABLISHED
tcp 0 1 10.2.226.39:3080 10.2.226.15:45260 LAST_ACK
tcp 0 292 10.2.226.39:3080 10.2.226.15:45256 ESTABLISHED
tcp 0 0 10.2.226.39:3080 10.2.226.15:45268 ESTABLISHED
tcp 0 292 10.2.226.39:3080 10.2.226.15:45277 ESTABLISHED
tcp 0 292 10.2.226.39:3080 10.2.226.15:45278 ESTABLISHED
tcp 0 0 10.2.226.39:3080 10.2.226.15:45279 ESTABLISHED
[root@PerfTestApp3 ~]# netstat -an |grep 3080 | grep ESTABLISHED -c
11
[root@PerfTestApp3 ~]# netstat -an |grep 3080 | grep ESTABLISHED -c
9
[root@PerfTestApp3 ~]# netstat -an |grep 3080 | grep ESTABLISHED -c
9
[root@PerfTestApp3 ~]#
可见平均10个并发。
再做一个单EventMachine实例支持最大并发连接数测试
还是上面那个Eventmachine实例,客户端的并发从50开始,每分钟递增50个,看最大的并发数到多少还可以支撑。
结果是250并发的时候就降下来了,然后失去响应。看图:

- 大小: 94 KB

- 大小: 101.8 KB
分享到:
- 2009-02-04 15:03
- 浏览 2826
- 评论(0)
- 论坛回复 / 浏览 (0 / 2428)
- 查看更多
相关推荐
Thin服务器以其高效、简洁和灵活性著称,常被用作Rails应用的开发和测试服务器。它支持多线程和非阻塞I/O,能够处理大量并发连接,这得益于其背后的EventMachine库。 "eventmachine"是Ruby的一个核心库,提供了异步...
这个项目很可能是一个基于EventMachine的Websocket服务器实现,EventMachine是一个C++编写的高性能异步事件库,常用于Ruby编程语言。 【描述】"em-websocket-master" 的描述没有给出具体信息,但根据命名习惯,可以...
另外,RubyDNS包含一个基于EventMachine之上的高性能异步DNS解析器。这个模块可以脱离整个RubyDNS服务器在客户端的应用程序里独立使用。 完全可编程的DNS服务器:无缝集成数据库系统,服务器和缓存系统。 强大...
由于AMQP协议通常涉及异步操作,如发送和接收消息,不使用eventmachine可能会影响到性能,但它简化了编程模型,使代码更易理解和调试。 同步AMQP客户端解决了缓冲消息和ack响应的问题。在AMQP中,消息发送到队列后...
4. **测试用例**:可能包含测试代码,用于验证 EventMachine 示例的正确性,并帮助开发者理解如何测试异步代码。 5. **文档**:项目可能包含有关如何理解和使用这些示例的说明,以及对 EventMachine API 的简要介绍...
它可能介绍了EventMachine、Celluloid等库的使用,以及如何设计响应速度快、资源利用率高的异步Ruby应用程序。通过学习异步编程,开发者可以构建高并发、低延迟的实时系统。 总之,《Ruby in Practice》这本书全面...
在Ruby实用技巧中,测试驱动开发(TDD)、测试框架、调试和性能分析工具、日志记录和错误处理等知识点也非常重要。Ruby的测试工具如RSpec和Minitest提供了编写单元测试和集成测试的框架,而byebug等调试工具帮助...
支持执行此操作的两种方法: InfluxDB Rubygem库EventMachine 我将两种方法都放在这里进行测试。 这可能有点脏。 将此作为扩展而不是处理程序插件可以提供更好的性能。 由于每秒都会产生大量指标,因此使用常规处理...
5. **性能**:Puma在许多基准测试中表现出色,通常比其他Ruby Web服务器(如Webrick、Thin等)更快。它在高并发场景下尤其出色,能有效应对突发流量。 6. **兼容性**:Puma与大多数Ruby版本和Rails版本兼容,包括...
Ruby的EventMachine库提供了处理异步事件的能力,适合构建高并发的系统。同时,微服务架构允许将大型应用分解为小而独立的服务,Ruby的Docker支持和框架如Hanami可以帮助实现这一目标。 企业级集成还关注测试和持续...
Thin是一个基于EventMachine的轻量级、高性能的Ruby web服务器。EventMachine是一个强大的库,它支持非阻塞I/O和回调机制,适用于构建高效的异步网络应用。当async_sinatra与Thin结合时,Sinatra应用可以利用...
- **性能分析**:使用工具如`Benchmark`进行性能测试。 - **内存管理**:合理使用内存,避免内存泄漏等问题。 - **异步编程**:利用EventMachine等库实现非阻塞IO操作。 ### 六、总结 《Ruby编程,实用程序员指南》...
6. **事件驱动编程**:Ruby的`EventMachine`库可用于实现非阻塞I/O,提高命令行应用的性能和响应性。 7. **测试**:使用如`RSpec`或`MiniTest`进行单元测试和集成测试,确保代码的正确性和稳定性。 学习和理解Ruby-...
8. **性能优化**:虽然Ruby的运行速度相对较慢,但可以通过优化代码、使用C扩展或JRuby(运行在Java虚拟机上的Ruby实现)等方式提高性能,特别是在处理大量文本或进行复杂计算时。 综上所述,利用Ruby开发跨平台...
12. **并发和事件驱动编程**:Ruby支持线程和进程,并且有EventMachine这样的事件驱动库,帮助开发者构建高性能的异步应用。 通过阅读《Programming Ruby 1.9 The Pragmatic Programmers' Guide》,读者不仅能掌握...
8. **异步编程**:Ruby的EventMachine或者Celluloid库可以用于异步I/O,提高性能。示例可能涉及到这些库的使用,以及如何在Ruby中实现并发处理。 9. **Gem的创建和发布**:如果`rb2-examples`是为创建自定义的Ruby ...
Swiftiply是一个针对Web应用程序设计的集群代理服务器,它的出现是为了优化网络性能并提供高可用性。这个系统的核心特点在于其独特的设计,使得后端应用能够更好地与之协同工作,从而提升服务质量和用户体验。...
Celluloid-SMTP服务器的实现受到EventMachine的启发,EventMachine是另一个流行的Ruby事件库,用于构建高性能、非阻塞I/O的应用程序。然而,Celluloid-SMTP并没有直接依赖EventMachine,而是利用了Celluloid库提供的...
9. **性能优化**:分析Ruby代码性能的工具(如Benchmark和Profiler),以及代码优化技巧,如避免全局变量、使用惰性枚举等。 10. **部署与持续集成**:了解如何将Ruby应用部署到服务器,使用Capistrano或Heroku,...
虽然这些通常需要高性能的语言来实现,但Ruby的灵活性可以用于快速原型设计和测试。 8. **脚本系统** - Ruby自身就是一个强大的脚本语言,开发者可能会创建一个脚本系统,让游戏设计师可以通过Ruby脚本来调整游戏...