【案例】
由于遇到一个实时采集股指,并把股指的实时数据在手机,平板电脑(股指数据采用的html展示)上展示给读者;
研究了使用ajax轮询请求数据,发现给服务器构成的压力比较大,
于是决定想想其他的方法,后来发现html5的websocket可以保持与服务器的连接,所以可实现服务器往页面推送股指数据。
因为在之前我使用JAVA 的NIO写了一个专用的http服务器用于公司的产品中,性能表现还不错。所以这次决定再次使用JAVA NIO
写一个websocket的服务器,在写之前也研究了一些websocket服务器的实现,大多数的实现只能算一个demo,无多大实用价值,
也研究了一些netty,但我觉得netty还是有点臃肿,由于时间紧张;只有自己写。打算采用JAVA NIO 非阻塞模式来写,结果发现
这是一个噩梦的开始,可能是我水平还不够,对JAVA NIO非阻塞模式处理长连接的研究还不够深入。使用传统的阻塞式socket编程方式,则每个客户连接需要一个独立的线程来处理,单台服务器所能处理的连接数量将受到较大的限制,都达不到预想的性能效果。
最后决定自己写一个模拟JAVA NIO的轮询,多路复用的东西;也算是为国内想写websocket服务器的童鞋探下路。
废话不多说,请看下面的图。附带源码中,有一个股指采集程序,websocket服务器负责将采集到的最新股指推送给客户端。
整个结构大量用到多线程,线程池技术,有较多场合使用到生产-消费模式,本来想用下JAVA NIO的,结果没能实现,只好自己写了一个线程来模拟。
【图解】
目前没有做性能压力测试,期待有童鞋帮忙做做这方面的测试,附件有源码(根据readme说明简单修改下就可以使用)
附件:http://download.csdn.net/detail/l790187749/5767263
【宝贝鱼(CshBBrain) 】
宝贝鱼(CshBBrain) 是一个来自中国的简单的轻量级的高性能的WebSocket服务器。支持服务器集群,能满足大并发量高容量的分布式系统开发。如果你需要开发带有集群功能的WebSocket服务器,宝贝鱼(CshBBrain) 也许是非常适合你的选择。在宝贝鱼(CshBBrain)中你可以将某个服务器设置为纯粹的集群管理服务器,或纯粹的业务节点服务器和集群管理业务节点服务器3种类型。适合用于数据推送(股票行情),游戏,聊天/im等服务器程序的构建。
宝贝鱼(CshBBrain)有NIO版本和AIO版本2个版本,宝贝鱼(CshBBrain) 4.0.0之前的版本基于NIO,从4.0.0版起基于AIO。基于JAVA实现的,充分运用了java的多线程技术,线程池,NIO或AIO,缓冲区池等技术。项目从技术架构上采用了分层思想,分为网络传输层,协议解析层和业务层共3层。
网络传输层封装了网络连接的请求建立,数据读写监听,为协议解析层提供服务;协议解析层专门负责具体的协议解析,如果你有兴趣,你也可以在协议层编写自己的协议编码解码器来构建基于你自己协议的服务器;业务层在协议解析层之上做具体的业务处理,这部分的工作就是你要开发具体服务所要编写的业务代码了。
2012年11月5日国内首款基于AIO的开源WebSocket服务器 宝贝鱼 (CshBBrainAIO)正式发布。基于AIO的开源WebSocket服务器 宝贝鱼(CshBBrain) 依然采用分层的体系结构,协议层和业务层 与 基于NIO技术的 开源WebSocket服务器 宝贝鱼 (CshBBrain) 完全一样,采用基于AIO的的 宝贝鱼 进行服务器开发的方式 与 基于NIO 的宝贝鱼 开发方式完全一样。正是得益于彻底的分层架构,所有宝贝鱼在很短的时间内开发出基于AIO技术的新版本。
如果你的分层 也向 宝贝鱼 一样的话,甚至 你在基于NIO 的宝贝鱼上开发的服务器 完全不用修改任何代码 只需要替换成 基于 AIO的宝贝鱼的网络传输层 的代码 一切就OK了!对,你的服务器也就变成了基于AIO的服务器了。基于AIO的服务器拥有所有基于 NIO 的宝贝鱼服务器所拥有的全部功能,但你必须将JDK换成JDK7.简单吧,简单就是 宝贝鱼 服务器所追求的理念。
如果你觉得Mina,Netty太复杂,庞大,难于上手,CshBBrain也许是适合你的选择。
CshBBrain is a simple,lightweight and high performace websocket server from China.CshBBrain implements in java, base on NIO,Pools ,Asynchronous and so.If you fell Mina, Netty is too large and complex,maybe CshBBrain is a suitable for you.
搭配使用的前台JS框架:http://code.google.com/p/cshbbrainjs/
该项目被开源中国收录:http://www.oschina.net/p/cshbbrain
作者技术博客:http://cshbbrain.iteye.com/
使用讨论专栏:http://www.iteye.com/blogs/subjects/CshBBrain
与宝贝鱼服务器搭配使用的前台JS框架CshBBrainJS于2012.12.03发布。
项目地址:
http://www.oschina.net/p/cshbbrainjs
http://code.google.com/p/cshbbrainjs/
https://github.com/CshBBrain/CshBBrainJS
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
转载来源:http://cshbbrain.iteye.com/blog/1207471
博客地址:http://cshbbrain.iteye.com/blog/1685217
项目首页地址:http://code.google.com/p/cshbbrain/