自己写的一个WebSocket服务器

本人已经发布最新版本的基于NIO 的轻量级高性能的websocket服务器项目CshBBrain,博客地址:http://cshbbrain.iteye.com/blog/1685217,项目googlecode地址:http://code.google.com/p/cshbbrain/
项目github地址:https://github.com/CshBBrain/CshBBrain
项目使用交流讨论专栏:http://www.iteye.com/blogs/subjects/CshBBrain


由于遇到一个实时采集股指,并把股指的实时数据在手机,平板电脑(股指数据采用的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说明简单修改下就可以使用)

猜你喜欢

转载自cshbbrain.iteye.com/blog/1207471