websocket的主要是为了解决在web上应用长连接进行灵活的通讯应用而产生,但websocket本身只是一个基础协议,对于消息上还不算灵活,毕竟websocket只提供文本和二进制流这种基础数据格式.在实际应用则更偏向于对象消息的处理,而在这基础上更希望集成一系列的消息路由机制来解决消息处理上的问题.为了解决以上问题beetle针对websocket进行了一些高层次的封装,让服务端处理消息变得更简单灵活.以下通过不同的示例介绍Beetle websocket开发包的简易性.

hello world

这个示列是每个开发语言入门程序,这也通过这样一个示例来介绍如何使用beetle websocket这个组件.实现一个helloword这样一个websocket服务是一件非常简单的事情,具体代码如下

public class HelloServer:BaseServer
{
[Command("hello")]
public void OnList(Beetle.Express.IChannel channel, string id, string command, JToken token)
{
string result = "hello " +token.ToString();
Send(channel,id,command,result);
}
}

是不是非常简单,这样就是一个简单的websocket通讯服务,那启动这个服务只需要很简单的一句话即可

mChatServer = new WebChatServer();
mChatServer.Open(9123);

这样就可以在9123这个端口开启服务.接下来web怎么调用呢?beetle同样针对websocket的js封装,所以在js调用这个服务非常简单.

<script type="text/javascript">
var wsUri = "ws://127.0.0.1:9125/";
function init() {
websocket = new WSClient();
websocket.onConnect = function (evt) { };
websocket.onClose = function (evt) { };
websocket.onReceive = function (evt) { };
websocket.onError = function (evt) { };
websocket.connect(wsUri);
$('#cmdconnect').click(function () {
websocket.send("hello", $('#txtName').val(), function (result, error) {
$('#txtResult').html(result);
});
});
}
window.addEventListener("load", init, false);
</script>

经过封装后是不是和传统的处理要简单很多呢,以下是其运行效果.

一个基于websocket的hello world示例通过beetle非常简单就完成,不过实际中应用场并不会这么简单,下面通过beetle websocket包进行一个简单的数据查询应用场景.

数据查询

接下来要做的就是通过beetle websocket通讯包进行一个简单的数据分页查询应用.

public class DataServer:BaseServer
{
[Command("search")]
public void Search(Beetle.Express.IChannel channel, string id, string command, JToken token)
{
int size = 10;
int pageindex = token["pageindex"].ToObject<int>();
SearchResult result = new SearchResult();
result.Pages = mCustomers.Count / size;
if (mCustomers.Count % size > 0)
result.Pages++;
for (int i = pageindex * size; i < mCustomers.Count; i++)
{
result.Items.Add(mCustomers[i]);
if (result.Items.Count >= size)
break;
}
Send(channel, id, command, result);
}
}

代码是不是非常简单呢,那js的代码又如何呢?

function search() {
websocket.send("search", { pageindex: pageIndex }, function (data, error) {
$('#lstCustomer').empty();
if (!pages) {
pages = data.Pages;
createPagination(data.Pages);
}
for (p = 0; p < data.Items.length; p++) {
item = data.Items[p];
createItem(item);
}
});
} function createPagination(pages) {
for (p = 0; p < pages; p++) { $('<li><a href="javascript:pageIndex=' + p + ';search()">' + (p + 1) + '</a></li>').appendTo($('#pagination'));
}
} function createItem(item) {
var html = '<tr>'
+ '<td>' + item.CustomerID + '</td>'
+ '<td>' + item.CompanyName + '</td>'
+ '<td>' + item.Address + '</td>'
+ '<td>' + item.City + '</td>'
+ '<td>' + item.Country + '</td>'
+ '<td>' + item.Phone + '</td>'
+ '</tr>';
$(html).appendTo($('#lstCustomer'));
}

同样简单方便的代码就能完成一个基于websocket的数据分页查询

总结

通过以上示例你可以了解到通过beetle websocket的开发包,可以非常高效在web开发websocket通讯应用,如果你对这个通讯包事情兴趣可以到 https://github.com/IKende/websocket.samples 获取更多的示例(包括在线聊天室)

高效简易开发基于websocket 的通讯应用的更多相关文章

  1. java SSM框架 代码生成器 快速开发平台 websocket即时通讯 shiro redis

    A代码编辑器,在线模版编辑,仿开发工具编辑器,pdf在线预览,文件转换编码 B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,快速开发利器)+快速表单构建器 freemaker模版技术 , ...

  2. 从零开始完整开发基于websocket的在线对弈游戏【五子棋】,只用几十行代码完成全部逻辑。

    五子棋是规则简单明了的策略型游戏,先形成五子连线者获胜.本课程习作采用两人在线对弈的方式进行比赛,拿着手机在上下班路上玩特别合适. 整个过程在众触低代码应用平台进行,使用表达式描述游戏逻辑(高度简化版 ...

  3. 如何使用irealtime.js实现一个基于websocket的同步画板

    同步画板演示 同时打开2个tab,分别在画布上写下任意内容,观察演示结果,同时可设置画笔颜色及线条宽度.演示地址 初始化画布 <canvas id="drawBoard" w ...

  4. 一款基于Netty开发的WebSocket服务器

    代码地址如下:http://www.demodashi.com/demo/13577.html 一款基于Netty开发的WebSocket服务器 这是一款基于Netty框架开发的服务端,通信协议为We ...

  5. 基于 WebSocket 实现 WebGL 3D 拓扑图实时数据通讯同步(二)

    我们上一篇<基于 WebSocket 实现 WebGL 3D 拓扑图实时数据通讯同步(一)>主要讲解了如何搭建一个实时数据通讯服务器,客户端与服务端是如何通讯的,相信通过上一篇的讲解,再配 ...

  6. workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的)

    workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的) 一.总结 1.下面链接里面还有一个来聊的php聊天室源码可以学习 2. ...

  7. Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G

    code&monkey   Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...

  8. 第一节:.Net版基于WebSocket的聊天室样例

    一. 说在前面的话 该篇文章为实时通讯系列的第一节,基于WebSocket编写了一个简易版聊天样例,主要作用是为引出后面SignalR系列的用法及其强大方便之处,通过这个样例与后续的SignalR对比 ...

  9. MQTT是IBM开发的一个即时通讯协议,构建于TCP/IP协议上,是物联网IoT的订阅协议,借助消息推送功能,可以更好地实现远程控制

    最近一直做物联网方面的开发,以下内容关于使用MQTT过程中遇到问题的记录以及需要掌握的机制原理,主要讲解理论. 背景 MQTT是IBM开发的一个即时通讯协议.MQTT构建于TCP/IP协议上,面向M2 ...

随机推荐

  1. Scala中Iterator允许执行一次

    背景 使用spark执行mapPartitionsWithIndex((index,iterator)=>{....}),在执行体中将iterator进行一次迭代后,再次根据iterator执行 ...

  2. 推荐大家使用的CSS书写规范、顺序

    写了这么久的CSS,但大部分前端er都没有按照良好的CSS书写规范来写CSS代码,这样会影响代码的阅读体验,这里总结一个CSS书写规范.CSS书写顺序供大家参考,这些是参考了国外一些文章以及我的个人经 ...

  3. MySQLdb操作mysql的blob值

    一般情况下我们是把图片存储在文件系统中,而只在数据库中存储文件路径的,但是有时候也会有特殊的需求:把图片二进制存入数据库. 今天我们采用的是python+mysql的方式 MYSQL 是支持把图片存入 ...

  4. 阻塞非阻塞,同步异步四种I/O方式

    举一个去书店买书的例子吧: (同步)阻塞: 你去书店买书,到柜台告诉店员,需要买一本APUE,然后一直在柜台等.(阻塞) 店员拿到书以后交给你. (同步)非阻塞: 你去书店买书,到柜台告诉店员A,需要 ...

  5. 不容错过!2016年度优秀UI/UX设计文章

    本文整理了一些2016年度最受欢迎的文章,例如有关UI / UX设计的理论知识,书籍和工具,如何做出更好的设计的方法和建议,以及新的设计趋势. 1. 2017年用户体验设计趋势 我们期待着2017年用 ...

  6. window service 注册、启动、删除

    sc命令 sc actionName serviceName sc start serviceName sc stop serviceName sc delete serviceName : 删除注册 ...

  7. 王爽-汇编语言-综合研究四-不使用main函数编程

    (一) 研究目的 使用C语言编程,我们一定要使用main函数么? (二) 研究过程 1) 最初的程序 首先,我们编写一个不写main函数的C语言程序. 程序如下: 在编译的过程中,没有发现错误.在链接 ...

  8. NetSuite API - SuiteScript API.js

    /* from: http://blog.csdn.net/levin_rain/article/details/8571444 */ ' Core SuiteScript Functions ' f ...

  9. Android多线程机制和Handler的使用

    参考教程:iMooc关于Handler,http://www.imooc.com/learn/267 参考资料:Google提供Android文档Communicating with the UI T ...

  10. 后台返回字符串类型function的处理 (递归算法)

    $(function(){ $.ajax({ type: "post", url: "${ctx}/modules/fos/reference/echart", ...