开源Websocket服务器宝贝鱼(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.
该项目被开源中国收录: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
基于CshBBrain和CshBBrainJS开发的互联网服务“数码快看”:
数码快看(http://211.100.41.186:8989/mcms/ws/index_ws_tom.html),如果你喜欢数码快看产品请到www.qook.com.cn下载iOS或Android的安装程序。由于知识产权的关系,提供的实例屏蔽了部分功能,混淆了前台代码,只支持高版本的Chrome浏览器。下面上几张图片吧:
CshBBrain V1.0.0 :
通过1年多的努力,今天终于发布了开源WebSocket服务器项目宝贝鱼(CshBBrain).由于本人比较懒,就使用了我的网名作为项目的名称。项目诞生于公司以前的一个股指推送服务器(见博客http://cshbbrain.iteye.com/blog/1207471),股指推送服务器每5秒就向手机、平板电脑上的网页推送最新的股指信息。由于当时本人对java NIO 研究不过深入,所以一直没有写出满意的基于NIO的websocket服务器。通过1年多的努力研究基于NIO的高性能的WebSocket服务器CshBBrain终于诞生了。
CshBBrain服务器的实现参考了Mina,Netty等NIO框架的实现;CshBBrain服务器的特点是小巧,灵活和高性能。学习曲线低。目前源代码已经释放到google code上。使用文档后续会慢慢补充和完善。
CshBBrain 是一个来自中国的简单的轻量级的高性能的WebSocket服务器。基于JAVA实现的,充分运用了java的多线程技术,线程池,NIO 或AIO(宝贝鱼 4.0.0开始支持AIO),缓冲区池等技术。项目从技术架构上采用了分层思想,分为网络传输层,协议解析层和业务层共3层。适合用于数据推送(股票行情),游戏,聊天/im等服务器程序的构建。
网络传输层封装了网络连接的请求建立,数据读写监听,为协议解析层提供服务;协议解析层专门负责具体的协议解析,如果你有兴趣,你也可以在协议层编写自己的协议编码解码器来构建基于你自己协议的服务器;业务层在协议解析层之上做具体的业务处理,这部分的工作就是你要开发具体服务所要编写的业务代码了。
如果你觉得Mina,Netty太复杂,庞大,难于上手,CshBBrain也许是适合你的选择。
项目源代码托管在google code上面,项目地址:http://code.google.com/p/cshbbrain/
CshBBrain V1.0.2:
CshBBrain 1.0.2版本发布,添加了推送类应用实例:股指推送应用,优化了客户端超时检测机制
CshBBrain 1.0.2版本发布,添加了推送类应用实例:股指推送应用,优化了客户端超时检测机制.
已同步更新到GitHub和googlecode上。
添加的股指推送应用截图:对需要开发实时推送消息到客户端的童鞋提供一点参考。
GitHub下载地址:https://github.com/CshBBrain/CshBBrain/downloads
googlecode下载地址:http://code.google.com/p/cshbbrain/downloads/list
CshBBrain V2.0.0:
添加服务器集群功能,以满足大并发量高容量的分布式系统开发需求
开源WebSocket服务器CshBBrain V2.0.0版本发布。在V2.0.0版本中添加服务器集群功能,以满足大并发量高容量的分布式系统开发。如果你需要开发带有集群功能的WebSocket服务器,CshBBrain V2.0.0也许是非常适合你的选择。在CshBBrain V2.0.0中你可以将某个服务器设置为纯粹的集群管理服务器,或纯粹的业务节点服务器和集群管理业务节点服务器3中类型。
管理服务器启动日志:
13:16:34,008 INFO MasterServer:464 - 数据读取回写监听线程创建成功:请求数据传输监听线程0
13:16:34,008 INFO MasterServer:803 - 请求处理调度线程创建完毕
13:16:34,024 INFO MasterServer:464 - 数据读取回写监听线程创建成功:请求数据传输监听线程1
13:16:34,024 INFO MasterServer:803 - 请求处理调度线程创建完毕
13:16:34,024 INFO MasterServer:929 - 连接监听线程创建成功
13:16:34,024 INFO MasterServer:960 - 集群连接监听线程创建成功
13:16:34,039 INFO MasterServer:992 - 集群服务器准备就绪,等待集群请求到来
13:16:34,039 INFO MasterServer:1055 - 服务器准备就绪,等待请求到来
13:16:57,226 INFO ClustersDecoder:99 - the msg received:
CshBBrain
Host:192.168.1.111
Key:789a71bbd02e47b8a45c7810
Protocol:Protocol
13:16:57,226 INFO ClustersDecoder:224 - 789a71bbd02e47b8a45c7810258EAFA5-E914-47DA-95CA-C5AB0DC85B11
13:16:57,257 INFO ClustersDecoder:340 - the response: CshBBrain
Host:192.168.1.111
Accept:fdW9PLg7Nj/qsdmwx+FXLL/k/9w=
Protocol:protocol
13:16:57,335 INFO Response:158 - 向客户端传输数据的长度 : 87
业务节点服务器启动日志:
13:16:57,054 INFO MasterServer:464 - 数据读取回写监听线程创建成功:请求数据传输监听线程0
13:16:57,070 INFO MasterServer:803 - 请求处理调度线程创建完毕
13:16:57,070 INFO MasterServer:464 - 数据读取回写监听线程创建成功:请求数据传输监听线程1
13:16:57,070 INFO MasterServer:803 - 请求处理调度线程创建完毕
13:16:57,070 INFO MasterServer:929 - 连接监听线程创建成功
13:16:57,070 INFO MasterServer:960 - 集群连接监听线程创建成功
13:16:57,085 INFO MasterServer:258 - 集群通信客户端消息处理线程创建完毕
13:16:57,085 INFO MasterServer:313 - 成功连接到集群服务器 192.168.1.220 的端口:9191
13:16:57,101 INFO MasterServer:1055 - 服务器准备就绪,等待请求到来
13:16:57,116 INFO MasterServer:992 - 集群服务器准备就绪,等待集群请求到来
13:16:57,148 INFO Client:668 - CshBBrain
Host:192.168.1.111
Key:789a71bbd02e47b8a45c7810
Protocol:Protocol
13:16:57,148 INFO ClustersCoder:162 - the response: CshBBrain
Host:192.168.1.111
Key:789a71bbd02e47b8a45c7810
Protocol:Protocol
13:16:57,226 INFO Response:158 - 向客户端传输数据的长度 : 80
13:16:57,335 INFO ClustersDecoder:99 - the msg received:
CshBBrain
Host:192.168.1.111
Accept:fdW9PLg7Nj/qsdmwx+FXLL/k/9w=
Protocol:protocol
CshBBrain V2.0.1:
完善服务器集群管理控制功能,持续优化架构让服务器以最大的并行度运行。
1.完成服务器集群中的:集群节点服务器系统参数收集统计,集群管理服务器控制集群节点服务器增加 读写监听线程数量 和工作线程数量,管理服务器给客户端分派节点服务器等功能。
2.将处理结果转换为buffer中的字节的工作放到工作线程中来完成,以达到最大程度的并行运行。
3.集群管理功能的用户界面与交互功能将将在接下来的一个小版本中提供,敬请关注。
4.最新代码和下载包已经发布到googlecode和github上。
googlecode:http://code.google.com/p/cshbbrain/downloads/list
github:https://github.com/CshBBrain/CshBBrain/downloads
当然你也可以直接用svn或github获取最新的源代码。
感谢您的关注!CshBBrain V4.0将支持Java AIO技术。
使用config_1.properties 的配置内容启动集群管理服务器,启动成功后在后台将看到如下信息,表示集群管理服务器启动成功:
09:00:09,156 INFO MasterServer:542 - 数据读取回写监听线程创建成功:请求数据传输监听线程0
09:00:09,171 INFO MasterServer:937 - 请求处理调度线程创建完毕
09:00:09,187 INFO MasterServer:542 - 数据读取回写监听线程创建成功:请求数据传输监听线程1
09:00:09,187 INFO MasterServer:937 - 请求处理调度线程创建完毕
09:00:09,218 INFO MasterServer:1063 - 连接监听线程创建成功
09:00:09,250 INFO MasterServer:1189 - 服务器准备就绪,等待请求到来
09:00:09,265 INFO MasterServer:1094 - 集群连接监听线程创建成功
09:00:09,265 INFO MasterServer:1126 - 集群服务器准备就绪,等待集群请求到来
使用config_2.properties 的配置内容启动集群节点服务器,启动成功后在后台将看到如下信息,表示集群节点服务器启动成功:
21:12:26,921 INFO Client:718 - CshBBrain
Host:192.168.1.220
Key:2d899c066a764141a4111986
Protocol:Protocol
节点服务器向管理服务器发起握手请求并获取到管理服务器的响应:
握手请求:
21:12:26,921 INFO ClustersCoder:163 - the response: CshBBrain
Host:192.168.1.220
Key:2d899c066a764141a4111986
Protocol:Protocol
21:12:27,140 INFO Response:128 - the postion of the data in write: 80
21:12:27,140 INFO Response:135 - translate size:80
21:12:27,140 INFO Response:160 - 向客户端传输数据的长度 : 80
握手响应:
21:12:27,359 INFO ClustersDecoder:99 - the msg received:
CshBBrain
Host:192.168.1.220
Accept:EwTk4R9Kre88pM4vMmCMQcSA59w=
Protocol:protocol
21:12:27,359 INFO ClustersDecoder:226 - 2d899c066a764141a4111986258EAFA5-E914-47DA-95CA-C5AB0DC85B11
管理服务器收到握手请求并进行握手处理返回握手处理结果给节点服务器,下面是管理服务器的后台输出:
21:12:27,156 INFO ClustersDecoder:99 - the msg received:
CshBBrain
Host:192.168.1.220
Key:2d899c066a764141a4111986
Protocol:Protocol
21:12:27,187 INFO ClustersDecoder:226 - 2d899c066a764141a4111986258EAFA5-E914-47DA-95CA-C5AB0DC85B11
21:12:27,203 INFO ClustersDecoder:342 - the response: CshBBrain
Host:192.168.1.220
Accept:EwTk4R9Kre88pM4vMmCMQcSA59w=
Protocol:protocol
握手成功后,节点服务器向管理服务器汇报配置参数,管理服务器收到信息后会返回“action=1000”响应,下面是节点服务器的后台输出信息:
21:13:23,281 INFO MasterServer:377 - 节点服务器:192.168.1.220:3865
服务器CPU内核数量:2
服务器读写监听线程数量:2
服务器工作线程数量:10
活跃连接客户端数量:0
活跃集群连接客户端数量:0
活跃本地连接客户端数量:0
21:13:23,312 INFO Response:314 - the postion of the data: 2
21:13:23,312 INFO Response:314 - the postion of the data: 110
21:13:23,312 INFO Client:718 - action=1&coreCount=2&readerWriterCount=2&workerCount=10&clientCount=0&clustersCount=0&port=7070&localCount=0
21:13:23,312 INFO Response:128 - the postion of the data in write: 110
21:13:23,312 INFO Response:135 - translate size:110
21:13:23,312 INFO Response:160 - 向客户端传输数据的长度 : 110
21:13:23,359 INFO ClustersDecoder:196 - jason,the msg is : action=1000
宝贝鱼 CshBBrain V4.0.0:
国内首款基于AIO(异步IO)支持集群的高性能开源WebSocket服务器 宝贝鱼 CshBBrain V4.0 发布。
国内首款基于AIO的开源WebSocket服务器 宝贝鱼 (CshBBrainAIO)正式发布。基于AIO的开源WebSocket服务器 宝贝鱼 依然采用分层的体系结构,协议层和业务层 与 基于NIO技术的 开源WebSocket服务器 宝贝鱼 (CshBBrain) 完全一样,采用基于AIO的的 宝贝鱼 进行服务器开发的方式 与 基于NIO 的宝贝鱼 开发方式完全一样。得益于彻底的分层架构,所有宝贝鱼在很短的时间内开发出基于AIO技术的新版本。
如果你的分层 也向 宝贝鱼 一样的话,甚至 你在基于NIO 的宝贝鱼上开发的服务器 完全不用修改任何代码 只需要替换成 基于 AIO的宝贝鱼的网络传输层 的代码 一切就OK了!对,你的服务器也就变成了基于AIO的服务器了。基于AIO的服务器拥有所有基于 NIO 的宝贝鱼服务器所拥有的全部功能,但你必须将JDK换成JDK7.简单吧,简单就是 宝贝鱼 服务器所追求的理念。
源代码已经上传到googlecode: http://code.google.com/p/cshbbrain/downloads/list
github:https://github.com/CshBBrain/CshBBrain/downloads
你也可以通过svn从googlecode获取代码:http://code.google.com/p/cshbbrain/source/browse/#svn%2Ftrunk%2Fsource%2FCshBBrainAIO
由于github客户端出问题源代码暂时没有更新到github库上。
开源WebSocket服务器 CshBBrain 的中文名正式改为 宝贝鱼。感谢您的关注和支持。
宝贝鱼 CshBBrain V4.0.1 和 CshBBrain V2.0.2:
更新的功能列表如下:
1.解决开启广播消息开关时,不能同时接入2个客户端的重大缺陷。
2.对广播消息做了重大优化,从以前一个线程发送广播消息进化到使用工作线程池中的线程并行的发送广播消息。
3.发送给所有客户端的广播消息共享一个消息的内容,避免大量重复的消息编码缓存处理工作,有效的提升广播消息的效率。
4.对框架的响应写回机制做了重大优化,服务器工作线程接收完消息,进行解码、业务处理和编码,以前是注册一个回写事件;优化后的处理方式时工作线程首先调用
回写函数向客户端回写内容,如果回写的内容不多,在工作线程中就处理完了,就避免了线程的切换,响应速度更快了;如果回写的内容多,工作线程的回写调用不能写
完全部内容,然后再注册回写事件,让Selector继续完成剩余内容的回写工作。优化后对于要求快速响应,消息内容短小的应用效果明细。
源代码已经更新到googlecode:http://code.google.com/p/cshbbrain/downloads/list
github:https://github.com/CshBBrain/CshBBrain/downloads
基于AIO的版本在github上单独创建了一个源代码库:https://github.com/CshBBrain/CshBBrainAIO
谢谢你们的关注!
宝贝鱼 CshBBrain V4.0.2 和 CshBBrain V2.0.3发布:
更新的功能列表如下:
1.解决数据传输过程中出现的半包和粘包的情况。
2.重构网络传输层的架构。
3.添加批量处理数据包。
4.添加了对前台开发WebSocket API 应用框架CshBBrainJS的支持 。
5.提供了工业级应用开发实例:数码快看 (http://211.100.41.186:8989/mcms/ws/index_ws_tom.html )
由于知识产权的关系,提供的实例屏蔽了部分功能,混淆了前台代码,只支持高版本的Chrome浏览器。如果你对数码快看感兴趣,你可以到 http://www.qook.com.cn/ 去下载.屏蔽掉部分功能的实例程序可能会有些不稳定的地方,请谅解。
实例程序的截图:
源代码已经更新到googlecode:http://code.google.com/p/cshbbrain/downloads/list
github V2.0.3:https://github.com/CshBBrain/CshBBrain/downloads
github V4.0.2 :https://github.com/CshBBrain/CshBBrainAIO
开源图片服务器CshBBrainPP V1.2发布
修复不能清除如下死连接
客户端与服务器端建立好链接,由于客户端异常一直未能发送请求数据到服务器端,客户端也一直没有关闭掉连接,服务器端在做超时处理时没有清除此类死连接;在并发量非常大的情况下会出现大量死链接,耗尽服务器资源而崩溃。
已经上传到googlecode:https://code.google.com/p/cshbbrainpp/downloads/list
github更新了最新版本的客户端同步代码是报如下异常,代码暂未更新,有点遗憾。
最近有点忙,没时间折腾,github上的源代码更新 等有时间在弄了。
开源WebSocket服务器宝贝鱼(CshBBrain) V2.0.4 和 CshBBrainAIO V 4.0.3发布同时发布
修复不能清除如下死连接
客户端与服务器端建立好链接,由于客户端异常一直未能发送请求数据到服务器端,客户端也一直没有关闭掉连接,服务器端在做超时处理时没有清除此类死连接;在并发量非常大的情况下会出现大量死链接,耗尽服务器资源而崩溃。
已经上传到googlecode:https://code.google.com/p/cshbbrain/downloads/list
github更新了最新版本的客户端同步代码是报如下异常,代码暂未更新,有点遗憾。
最近有点忙,没时间折腾,github上的源代码更新 等有时间在弄了。
谢谢你们的关注!