开源WebSocket服务器 宝贝鱼(CshBBrain)发布有些日子了,很多人研究 宝贝鱼(CshBBrain) 仅仅是为了学习其中所使用到的WebSocket协议,或是其使用到的NIO,AIO技术,是学习多线程,并发包的使用。很多人也只是学习学习,研究研究,没有人想过将宝贝鱼(CshBBrain)用于项目中,因为没有看到有人使用,担心风险。
下面我就秀一下采用服务器 宝贝鱼(CshBBrain) 作为后台业务服务器,CshBBrainJS 作为前台开发数据通信框架的移动互联网应用。数码快看(http://211.100.41.186:8989/mcms/ws/index_ws_tom.html),如果你喜欢数码快看产品请到www.qook.com.cn下载iOS或Android的安装程序。由于知识产权的关系,提供的实例屏蔽了部分功能,混淆了前台代码,只支持高版本的Chrome浏览器。下面上几张图片吧:
使用CshBBrainJS 作为前台数据通信的框架与后台基于宝贝鱼(CshBBrain)的业务服务器进行数据交换。用户在使用系统的整个过程中客户端程序始终保持与业务服务器一个连接,所有请求的发送,数据的接收都通过这个连接。这就避免了采用ajax进行数据通信时,每次都必须创建一个连接,有时会在短时间内发起几十次请求,而请求发送的数据也不多,花销在创建连接上的时间却非常的客观。
使用CshBBrainJS 请求后台数据的使用方式和使用jquery的getScript函数获取数据的方式相同。CshBBrainJS 提供getData(url,callBack)函数获取数据,使用时首先设置好要连接的地址bizServer;然后调用getData获取数据,调用时传递请求的接口以及参数url和获取数据后的处理函数callBack,url的格式遵循html的get请求数据格式:接口名?a=av&b=bv,会调函数在接收到请求响应数据时由CshBBrainJS 框架自动调用,CshBBrainJS 框架自己会调度管理好每个请求的发送,数据的接收和回调函数的调用。
使用CshBBrainJS作为前台框架时,服务器返回时,必须将框架请求时传递的taskKey的值传递回来,并且约定好数据发送回来的js对象的变量名即可。下面贴上CshBBrainJS的所有代码,CshBBrainJS所有代码不压缩只有3k多点,压缩后只有1k多点。下面贴上CshBBrainJS的所有代码:
var taskCount = 1;
function socket(){
this.managerServer = "";//管理服务器地址
this.isClusters = 1;// 是否为集群websocket服务器,1:表示不是,2:表示是集群
this.bizServer = "ws://192.168.1.100:9090/";// 业务websocket服务器地址
this.bizSocket = null;// 业务websocket服务器连接
this.taskQueue = {};// 调用任务队列
this.waitQueue = new Array();// 等待调用的队列
this.taskKey = "taskKey";//任务调用key
this.tryCount = 0;// 尝试连接的次数
this.status = -1;// 业务websocket连接状态,-1:表示还没有创建连接,0:正在连接,1:表示没有连上服务器,2:正在关闭连接,3:表示已经关闭连接
var self = this;
this.init = function(){// 初始化连接
if(self.isClusters == 2){// 服务器采用集群的方式
var clusterSocket = new WebSocket(self.managerServer);
clusterSocket.onopen = function(event){
clusterSocket.send();// 获取biz地址请求
}
clusterSocket.onmessage = function(event){// 设置biz服务器地址,关闭连接
self.bizServer = event.data;
self.createBizSocket();
clusterSocket.close();
}
}else{// 服务器没有采用集群的方式
self.createBizSocket();
}
}
this.createBizSocket = function(){
self.bizSocket = new WebSocket(self.bizServer);
self.status = 0;// 正在连接中
self.bizSocket.onopen = function(event){// 连接成功
self.status = 1;// 成功连接上服务器
self.tryCount = 0;// 尝试连接的次数置空
var paramter = self.waitQueue.shift();
while(paramter){
self.taskQueue[paramter.timestamp] = paramter;
self.bizSocket.send(paramter.url);
paramter = self.waitQueue.shift();
}
}
this.bizSocket.onerror = function(event){
try{
self.bizSocket.close();
}catch(e){}
self.status = -1;// 正在关闭连接
++self.tryCount;// 尝试连接的次数
if(self.tryCount <= 10000){
// 将执行队列中的任务添加到数组中
for (prop in self.taskQueue){
self.waitQueue.unshift(self.taskQueue[prop]);
}
self.init();// 继续连接
}
//alert("连接出错");
}
/*
this.bizSocket.onclose = function(event){
this.status = -1;// 已经完成关闭操作
++this.tryCount;// 尝试连接的次数
}*/
this.bizSocket.onmessage = function(event){// 对业务服务器返回的业务代码进行处理,并调用回调函数
eval(event.data);// 执行服务器端返回的js代码
if(taskKey){// 有回调函数,则调用回调函数
try{
if(self.taskQueue[taskKey].callBack){// 存在回调函数就调用
self.taskQueue[taskKey].callBack(resultData);
}
}catch(e){
self.taskQueue[taskKey].callBack(null);
//alert("业务处理函数出现异常");
}
self.taskQueue[taskKey] = undefined;
}
//var stock = window.JSON.parse(event.data);
};
}
this.currTime = function(formatStr){// 获取系统当前时间戳
return ++taskCount;
/*
if(formatStr){
return (new Date()).format(formatStr);
}else{
return (new Date()).valueOf();
}*/
}
this.processURL = function(url,timestamp){// 对于请求地址进行处理,并添加任务调度key
if(!url){
return;
}
var single = "&";
if(url.indexOf("?") == -1){
single = "?";
}
return encodeURIComponent(url) + single + self.taskKey + "=" + timestamp;
}
this.getData = function(url,callBack){// 调用websocket获取数据
var callKey = self.currTime();
var requestUrl = self.processURL(url,callKey);
console.log(url);
//if(callBack){// 有回调函数,将函数放入到调度队列中
var paramters = {timestamp:callKey,url:requestUrl,callBack:callBack};
self.taskQueue[callKey] = {timestamp:callKey,url:requestUrl,callBack:callBack};
//}
switch(self.status){
case -1:// 没有建立连接
self.init();
self.waitQueue.push(paramters);
break;
case 0:// 正在建立连接
self.waitQueue.push(paramters);
break;
case 1:// 连接已经建立
self.taskQueue[callKey] = paramters;
self.bizSocket.send(requestUrl);
break;
case 2:// 正在关闭连接
self.waitQueue.push(paramters);
break;
case 3:// 已经关闭连接
self.waitQueue.push(paramters);
break;
}
}
this.init();// 初始化websocket
}
var _ = new socket();// 创建websocket连接对象
服务器返回的数据格式为:
var taskKey = 5;var resultData= [{a:2,b:3},{a:8,b:9}];
希望以上的内容对你使用和学习CshBBrain,CshBBrainAIO,CshBBrainJS有所帮助。
分享到:
相关推荐
开源WebSocket服务器项目“宝贝鱼”(CshBBrain)提供了一个实现这一功能的解决方案。 CshBBrain V1.0.1是一个针对开发者的工具,它实现了WebSocket服务器的基本功能,并且是开源的,允许开发者根据自己的需求进行...
CshBBrainJS的主要目的是与开源WebSocket服务器项目 宝贝鱼(CshBBrain和CshBBrainAIO)配合使用开发基于WebSocket的应用,当然你也可以使用CshBBrainJS框架来与其他Websocket服务器搭配使用开发应用,只要你的...
宝贝鱼(CshBBrain)_是一个来自中国的简单的轻量级的高性能的WebSocket服务器。支持服_CshBBrain
WebSocket是一种在客户端和服务器之间建立持久连接的协议,它允许双方进行全双工通信,即数据可以在两个方向上同时传输,极大地提高了实时性。在本项目中,我们使用C++来实现一个WebSocket服务器,借助了libuv库来...
10. **应用逻辑**:在实际项目中,MFC WebSocket服务器不仅要处理连接,还需要实现具体的应用逻辑,如接收客户端发送的数据、处理业务逻辑并返回响应。 在提供的压缩包文件中,`WsServer.exe`应该是编译后的可执行...
在本项目中,我们将探讨如何在Linux环境下,利用C++的SOCKET编程技术来实现一个WebSocket服务器,而不依赖任何开源库。 首先,我们需要理解C++中的SOCKET编程基础。在C++中,SOCKET是网络编程的基本接口,它提供了...
WebSocket是一种在客户端和服务器之间建立持久性连接的协议,允许进行全双工通信,常用于实时应用如在线游戏、股票交易、聊天室等。将MFC与WebSocket结合,我们可以创建高性能、低延迟的桌面应用程序。 1. **...
nodejs-websocket 基于node创建websocket服务器 websocket 协议和 http 协议类似,http 协议有一个缺陷,只能由客户方端发起请求,服务端根据请求 url 和传过去的参数返回对应结果 websocket 是双向通信的,只要 ...
c# winform快速建websocket服务器源码 wpf快速搭建websocket服务 c#简单建立websocket服务 websocket快速搭建 随着互联网技术的飞速发展,实时交互和数据推送已成为众多应用的核心需求。传统的HTTP协议,基于请求-...
WebSocket是一种在Web应用中实现全双工通信的协议,它允许服务器和客户端之间进行实时、低延迟的数据交换。WebSocket协议是HTML5的一个重要特性,它弥补了HTTP协议在长连接和双向通信上的不足,为实时Web应用提供了...
本项目是基于C++的SOCKET编程实现的WebSocket服务器,特别适合于Windows平台上的开发和学习。 在C++中,SOCKET编程是通过Windows Socket API(Winsock)来实现的,这是一个低级别的网络编程接口。在创建WebSocket...
SuperWebSocket是基于.NET开源Socket框架SuperSocket开发的, SuperSocket所支持的大部分功能在SuperWebSocket中得到了继承。用户可通过SuperWebSocket来快速的构建可靠的,高性能的websocket服务器端应用程序。 和...
3. **初始化WebSocket服务器**:在初始化阶段,设置WebSocket服务器的端口号、回调函数等参数。这些回调函数将在连接建立、数据接收和断开连接时被调用。 4. **连接处理**:当客户端尝试连接到WebSocket服务器时,...
此资源为websocket的页面源码,配合Spring boot 2基于Netty的高性能Websocket服务器(心跳模式) 文章来使用
C++中的WebSocket实现往往依赖于第三方库,这里提到的是基于C++和Boost.ASIO的WebSocket客户端和服务器库。Boost.ASIO是Boost库的一部分,提供了一种跨平台的方式来处理I/O操作,如网络通信。ASIO的设计使得它可以...
WebSocket协议基于TCP,但添加了自己的握手和帧格式,以便在浏览器和服务器之间保持长期连接。 服务器端,这里提到的是使用.NET Framework开发的WebSocket服务。.NET Framework 2.0、3.5、4.0和4.5都支持WebSocket...
易语言websocket服务器源码,websocket服务器,握手包处理,生成握手参数列,创建返回握手包,返回数据包处理,接收数据包解码,高级截取文本,取sha1,切片,ord,字节集到十六进制,十六进制到字节集,取十进制,取数值,utf8到...
在实际应用中,WebSocket服务器会监听指定的端口,等待客户端的连接请求。当HTML客户端加载时,JavaScript会创建一个新的WebSocket实例,并连接到服务器。一旦连接建立,客户端和服务器就可以通过WebSocket对象进行...
WebSocketServer测试服务器是一种基于WebSocket协议的服务器实现,用于实时、双向通信。WebSocket协议是HTML5引入的一种在单个TCP连接上进行全双工通信的协议,它为客户端和服务器之间的数据交换提供了简单直接的...