随笔分类 -  Beetle

高性能的Tcp通讯组件
摘要:一般在传统网页中注册用户信息都是通过post或ajax提交到页面处理,到了HTML5后我们有另一种方法就是通过websocket进行数据交互.websocket在数据交互有着传统网页所不具备的灵活性,通过Websocket建立长连接后服务器可以直接向client发送数据,而每次数据交互没有必要带上大量的http头信息.websocket协议本身支持两种数据格式文本和流,通过文本json的方式和javascript交互是一件非常简单事情,通过json网页和Websocket通讯就非常便利,但要达到这个便利性我们还是要做简单的一些包装还好现有的json在各平台的组件都比较成熟.通过分析json数据 阅读全文
posted @ 2012-12-03 22:55 beetlex 阅读(9405) 评论(5) 推荐(5) 编辑
摘要:WebSocket是HTML5里提供的一种便于TCP长连接通讯的协议机制,随着HTML5的普及这种技术的使用会变得越来越广泛,由于Beetle可以灵活地扩展不同的协议,那自然而然对WebSocket支持也是一件非常简单的事情.对于WebSocket的协议分析处理就不详细描述可以参考下载程序有完整协议包代码,如果想更详细了解Websocket的协议可以到这里:http://datatracker.ietf.org/doc/rfc6455/?include_text=1下面讲述如何使用Beetle非常方便地实现一个基于WebSocket的Hello wold程序.服务端代码 class Pr... 阅读全文
posted @ 2012-11-24 22:50 beetlex 阅读(15050) 评论(14) 推荐(3) 编辑
摘要:在有些场中存在着大量的消息广播转发,为了了解.net socket tcp在这方面的性能表现,所以做了一个比较极端信息广播转发强度测试.测试场景是以400个连接信息相互广播为测试用例就是当其中一个连接发送消息到服务端就会转发到其他连接上,测试情况分别是每个连接每秒广播2,5和10次,其服务器每秒的信息转发量分别320000,800000和1600000.测试的硬件分别是一台win2008服务器,1台WIN2003和两个vm win2003.测试交互的消息如下:class Po : IMessage { public int ID; public short X... 阅读全文
posted @ 2012-11-23 00:18 beetlex 阅读(3501) 评论(4) 推荐(2) 编辑
摘要:之前的章节里已经讲述了Beetle对不同应用协议的扩展和处理,在这章会讲解Beetle实现一个比较通用的应用协议HTTP扩展.组件对于HTTP协 议的扩展也是一件非常简单的事情,同时也能得到组件出色的性能和稳定性所支持.不过在实现之前必须对HTTP协议组成部分有个大概的了解.HTTP协议主 要由两大部分组件分别是消息头和消息体,消息头是必须的有于描述获取相关内容和附带的一些属性如:GET /images/logo.gif HTTP/1.1,通过回车换行符来标记消息头结束.对于消息休则是可选的如果存在消息体必须在消息头里标识Content-Length.对于HTTP 更详细的内容可以查看http 阅读全文
posted @ 2012-11-08 09:44 beetlex 阅读(2939) 评论(2) 推荐(2) 编辑
摘要:Protobuf是google制定的一种对象序列化格式,而在.net下的实现有protobuf-net.而protobuf-net在序列化方面有着出色的性能,效率是.net二进制序列化几倍,而序列化后所占的空间也少于.net二进制序列化;除了以上两个优势外Protobuf有着一个更大的优势就是和其他平台交互的兼容性,在现有大部分流行的语言平台中基本都有Protobuf的实现.因此采用protobuf进行对象序列化是个不错的选择.接下来详细讲解Beetle实现对protobuf-net支持.定义协议格式为了保证TCP数据流正确处理,首先要做的事情还是要制定一个处理协议,来保证数据处理的有效性.. 阅读全文
posted @ 2012-10-21 21:59 beetlex 阅读(3444) 评论(1) 推荐(0) 编辑
摘要:当写完一个TCP服务的时候,是不是很想马上测试一下这个服务的性能,它到底能应付怎样的请求处理,其性能又是怎样呢.相信以下这个小工具能帮到你的小忙,它是基于Beetle实现的一个小工具只需要设置一下参数就能对一个TCP服务进行一个简单的吞吐性能测试.这个小工具可以设置发送的数据内容,连接的数量.其测试流程是连接先向服务器发送指定的数据,等服务回应后进入下一次请求.工具可以看到每个连接的简单信息,包括:上一次请求应答延时,最大延时,最小延时和接收发送字节数.工具状态栏下面是一个总体处理情况.如果工具发送接收处理不能满足你的需要,还可以通过修改代码来达到你想要的情况.(工具是完全用.net实现,所以 阅读全文
posted @ 2012-10-17 23:22 beetlex 阅读(12348) 评论(10) 推荐(6) 编辑
摘要:组件发送的对象都必须实现IMessage接口,通过实现接口来描述一个对象的序列化过程;自定义读写流的好处就是可以得到更好的性能,但缺点也相对明显的就是工作量比较多.在很多应用场合下所追求的并不是性能第一,而是希望省下这些烦锁的工作,为了应付这种需要组件可以实现一个简单的消息适配器来完成这样的功能.下面通过扩展的方式来实现组件对.net二进制序列化对象转输的支持.定义协议格式在TCP下进行数据交互通讯首先是要制定一个通讯的应用协议,由于组件提供基于结束符和头大小描述的基础分析器,可以从这基础分析协中派生下来.似下通过一个图来描述协议的具体细节协议描述比较简单消息头是4个字节用于存储消息的总长度, 阅读全文
posted @ 2012-10-13 21:43 beetlex 阅读(2185) 评论(1) 推荐(0) 编辑
摘要:在处理TCP数据的时候我们需要考虑一个粘包的问题,所谓的粘包就是本次接收的数据不一定完整对应对方发送的数据.对方发送的一次数据有可能需要接收多次才能完成,实际要处理的情况要复习一点;为了解决点包问题所以必须要制订数据分析协议来处理,常用的解决方法有两种:一种是基于结束符的方式,而另一种则是在消息头通过一个4字节存储消息大小.分包注意细节虽然制定处理粘包的方法,但这两种方法在处理上还是要注意几种情况,以下通过一个图来表达几种情况的处理.其实最主要关心的是就是分隔符或头描述的内容分别存放在两次receive的数据中.实现一个简单的协议分析器组件提供以上两种分包处理方式,基础类分别是Head... 阅读全文
posted @ 2012-10-11 21:46 beetlex 阅读(2357) 评论(5) 推荐(0) 编辑
摘要:使用Beetle构建TCP服务应用是件非常简单的事情,它并不需要你去关注Socket细节,如果你想用Socket编写高性能的TCP服务,那你要关注的东西非常多,异步数据处理,大量连接下的线程管理和连接断相关资源处理等等复杂的事情;使用Beetle那以上的事情完全都可以不用关心,因为Beetle都已经帮你处理好.而你需要做的只需要简单的定义相关对象和绑定相关处理事件即可.以下是通过Beetle实现一个简单的TCP服务配置在使用组件的需要对组件进行初始,可以在配置文件进行实始化信息配置 <configSections> <section name="beetle&quo 阅读全文
posted @ 2012-10-09 21:53 beetlex 阅读(3331) 评论(4) 推荐(2) 编辑
摘要:对于.net socket的性能问题,似乎MS也没有象WCF一样出个详细的报告,在很多人的使用情况来看性能方面并不理想。如果你比较关注这方面的东西,那这个测试的报告应该可以给你帮助对.net socket性能方面有个更多的了解。如果你担心.net socket的性能是否满足游戏服务端或应用网关的需要,以下测试结果相信也可以给到你一个明确的答案。测试简述为了更接近实际应用情况,测试流程 主要如下:数据接收->协议分析->数据反序列化成协议消息对象->消息对象分发->构建应答对象->序列化成协议数据 ->发送;而整个测试流程只缺少逻辑处理,不同应用逻辑处理存在差 阅读全文
posted @ 2012-10-08 12:33 beetlex 阅读(3602) 评论(10) 推荐(5) 编辑