欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

自己写的一个WebSocket服务器

程序员文章站 2022-05-04 15:34:43
...
本人已经发布最新版本的基于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的,结果没能实现,只好自己写了一个线程来模拟。


自己写的一个WebSocket服务器
            
    
    博客分类: java综合 javaniowebsocket多线程



目前没有做性能压力测试,期待有童鞋帮忙做做这方面的测试,附件有源码(根据readme说明简单修改下就可以使用)
  • 自己写的一个WebSocket服务器
            
    
    博客分类: java综合 javaniowebsocket多线程
  • 大小: 75.3 KB