摘要: 之前已经讲解了Beetle简单地构建网络通讯程序,那程序紧紧是讲述了如何发送和接收数据;这一章将更深入的使用Beetle的功能,主要包括消息制定,协议分析包括消息接管处理等常用的功能。为了更好的描述所以通过创建一个聊天室程序来体现以上功能的易用性。 在实现功能之前先想好通讯上的协议需要什么功能,总结一下有:登陆,登陆成功返回,登陆和退出通过,获取现有其他用户和发送聊天信息等。需要的基础功能已经明确那就制定消息了. 通过Beetle处理消息对象必须实现IMessage接口,主要目的是由组件更好地管理buffer,避免重复的byte[]构建开销. public interface I... 阅读全文
posted @ 2012-02-22 10:10 beetlex 阅读(2182) 评论(7) 推荐(3) 编辑
摘要: beetle是基于c#编写的高性能Socket tcp组件,它基于SocketAsyncEventArgs的实现并提供了发送队列和接收队列的支持,可以根据情况灵活地设置1-N个发送队列和接收队列。除了队列上的支持组件还提供Buffer缓冲池和基于Buffer的DataWriter,DataReader对象,从而达到消息可以灵活地分布在多个Buffer中,实现更好的内存利率.为了使处理更高效组件使用多个SocketAsyncEventArgs对数据进行处理,可以同时进行接收和发送操作.经测试beetle可以在一些比较旧的电脑上(core e4300 1.8g)的电脑可以进行6W个以上的s... 阅读全文
posted @ 2012-02-21 20:33 beetlex 阅读(5902) 评论(3) 推荐(5) 编辑
摘要: 之前在使用SocketAsyncEventArgs进行数据接收的时候,经常发现某部分数据错乱但确没有影响协议分析。在无意中发现原来犯了个低级错误,先看下以下代码:public void IO_ReceiveComplete(TcpSocketAsyncEventArgs e) { TcpChannel channel = e.Channel; if (e.BytesTransferred > 0 && e.SocketError == System.Net.Sockets.SocketError.Success) ... 阅读全文
posted @ 2012-02-09 00:17 beetlex 阅读(5346) 评论(5) 推荐(2) 编辑
摘要: TCP/IP是可靠性传输协议,它能保证数据能按顺序的方式到达目的地.看到以上描述在写TCP/IP应用的时候似乎就可以放心了,只要程序不出意外就数据输传就是正确.但最近在做一个文件传输工作的时候确得到的结果并不是这样,发现网络环境和一次发送数据大会影响整个输传结果.以下是这两晚的测试情况测试内容描述: 每个文件块信息包大概是120k左右 采用异步5连接输传,双方的Socket.SendBufferSize和Socket.ReceiveBufferSize都设置为64K 测试服务器分别有: 局域网:ServerA 在美国机房:Server... 阅读全文
posted @ 2012-02-02 10:47 beetlex 阅读(20897) 评论(51) 推荐(5) 编辑
摘要: Bee是基于c#编写免费的网络文件管理工具,分别有服务端和客户端;主要功能包括:多线程文件上传、下载、续传,在线压缩、解压等功能,还具备同时对多个服务进行操作.下载 阅读全文
posted @ 2012-01-30 21:48 beetlex 阅读(793) 评论(3) 推荐(0) 编辑
摘要: 最近在写一个文件上传下载的服务端和客户端,在开发之前把交互流程大概设计了一下顺便分享出来,流程主要包括验证,交口端口验证,文件上和文件下载等功能.之于文件删除,在线压缩和解压等流程相对简单所以就不列出来了.登陆和交互端验证其实很多网络通讯应用中登陆和数据交互都是分开端口服务的,这样就存在一个数据交互连接合法性的验证,以下是针对这验证的流程设计.上传文件流程上传文件主要的工作是服务验证用户是否有权,客户端提交上传文件信息,然后把文件分割成N个小数据包,通过多线程+队列的方式实现多线程上传.把分割信息存到文件或数据库我们就能实现续传了文件下载文件下载和上传原理差不多,先从服务器检测文件获取文件.. 阅读全文
posted @ 2011-12-01 09:50 beetlex 阅读(4407) 评论(0) 推荐(0) 编辑
摘要: 之前已经简单的测试了c# socket的数据吞吐处理能力,结果虽然比较理想;但以这样的数据包处理量在某些场景下是远远不够用的,在某些应用场景中每秒要处理的数据包不是1,2W个可能几W,上10W或更多的数据包吞吐。在一个游戏场景中同场景存在100用户,每个用户的变更都会通知其他199的用户,如果每个用户平均每秒变更3次,那服务端每秒接收转发的数据包就是100x100x3=3w个。如果是200个用户同场景,那所每秒所面对的处理包会是200x200x3=12W个,想c# socket提供这么密集的IO处理是不太可能的事情,即使是可以那也要很不错的硬件支撑。 从软件上去解决这问题那只能选择减少I... 阅读全文
posted @ 2011-11-28 10:17 beetlex 阅读(6836) 评论(20) 推荐(0) 编辑
摘要: 前段时间讲述了在编写一个高性能的Socket Tcp服务要注意的细节[c#编写高性能Tcp Socket应用注意事项];按那些细节描述的方法来实现一个Socket Tcp性能到底达到一个怎样的效果呢?以下是针对相关方法实现的Socket Tcp服务进行一个测试,看一下在那种方式编写的Socket Tcp达到一个怎样的性能指标。测试环境server:Core2 4300 1.8G 2G内存 win2003client1:Core i7 Q740 1.7G 4G内存 win 764client2:P4 2.4G 1G内存 WIN2003由于I7 Q740装的是win7 系统所以没有拿来做服务器端。 阅读全文
posted @ 2011-11-21 10:01 beetlex 阅读(10069) 评论(22) 推荐(5) 编辑
摘要: 以下是在实现一个高性能Socket组件总结下来的问题,如果你只需要处理几千的并发应用那代码编写上注意一下就行了,但需要面对上万或几万的并发应用.那以下问题的总结,相信对编写这方面的应用有很大的帮助.SocketAsyncEventArgs这个对象是.net 2.0 sp1后提供的,主要用于实现高性能Socket数据发送和接收处理(对于更详细的介绍可以到MSDN上了解).该对象提供了三个方法设置相关发送和接收的缓冲区,SetBuffer(Int32, Int32),SetBuffer(Byte(), Int32, Int32),BufferList,前两者不能和后者共存(MSDN上有说明原因.. 阅读全文
posted @ 2011-11-14 12:27 beetlex 阅读(19283) 评论(55) 推荐(12) 编辑
摘要: 在之前的文章讲术了如何设计一个简单的网络缓冲区和缓冲池,在.net网络应用中有一个普遍的问题就是如何把对象写入缓冲和从缓冲中读取数据还原对象.在这里会实现一个Writer和Reader方便地把信息写入缓冲区和从缓冲区读取;先看下Writer和Reader功能.BufferWriterView Code public class BufferWriter : IDisposable { private IList<Buffer> mBuffers = new List<Buffer>(20); public IList<Buffer> Buffers ... 阅读全文
posted @ 2011-11-02 12:16 beetlex 阅读(4227) 评论(3) 推荐(0) 编辑