摘要: 信息广播是一种很常见的信息通讯情况,如是IM的群组或游戏的同场景玩家,相对IM来说游戏这种场景广播所产生的信息量就非常大,因为一个玩家的行为改变都要通道同场景的所有玩家.如果一个500玩家的场景,每个玩每秒都在运动那将会产生500X500=250000的信息量.如果每个员家每秒都产生2次变化那就将会是50W的消息量.经过测试beetle在一台core e4300 1.8g的pc完全能够处理500X500X2的消息量.以下是一个测试结果.client的延时和消息情况服务端的处理情况 阅读全文
posted @ 2012-03-21 15:40 beetlex 阅读(614) 评论(13) 推荐(0) 编辑
摘要: 一个通讯组件除了面对固有连接的压力测试外还必须针对新的连接接入和断开释放处理,beetle进行了1KW次连接接入断开后能够很好的释放占用内存,从测试结果来看没有出现内存的增长。 测试是两台client分别每秒以600-1000的数量接入到beetle服务端,请求应答10次后自动断开连接。beetle对30秒内就没有进请求的连接进行强行关闭并释放资源。以下是测试情况: 阅读全文
posted @ 2012-03-20 14:16 beetlex 阅读(540) 评论(0) 推荐(0) 编辑
摘要: 作为一个通讯基础组件,其稳定性必须进行大量的测试。因为服务必须保持不7x24不间断地运行,任何的内存的持续性增长都会导致服务最终因为内存问题而倒下。Beetle为了保证这一点在1.2的版本进行了各项优化,经初步测试进行大量并发的同时进行长时间压力测试,经过十几亿次的请求应答后Beetle依然保持着稳定的内存使用状况。 以下是测试描述和结果。 服务端: CORE E4300 1.8G win2003 两台client建立4K个长连接,每个连接大概每0.1秒向服务器发送请求,请求对象是class Register : IMessage { public... 阅读全文
posted @ 2012-03-19 08:46 beetlex 阅读(947) 评论(0) 推荐(1) 编辑
摘要: 其实VS已经提供基于CPU占用情况的性能分析功能,但它并不能什么情况都能分析出来。当你发现mscorwks.dll这玩意占用着大量的资源,确无法点击进去的看具体情况的时候有可能会感到无能为力,也许已经尽力了那些.net framework的事情管不了。其实mscorwks.dll的损耗和我们编写的代码有着紧密的联系,我们可以通过VS的内在分析工作看下代码的内存分配状况然后再查找问题。 打开性能分析向导选择内存分配采样即可。运行后会产以下的结果图:图中可以看到占用字节最多的方法和分配最多字节的类型,我们可以点击内存分配最多的类型看下详细列表在这里我们可以看到byte[]和char[]分配了... 阅读全文
posted @ 2012-03-14 11:34 beetlex 阅读(21221) 评论(4) 推荐(15) 编辑
摘要: 在c#中把int转成byte[]一般都会使用BitConverter.GetBytes可以获取得到,但BitConverter有个问题就是每次调用都会产生一个新byte[];如果你比较执着的话以下提供两种方式可以省下这一些。 从BitConverter中把代码偷取出来,加功一下:),先看下BitConverter.GetBytes关于int的方法1 public unsafe static byte[] GetBytes(int value)2 {3 byte[] array = new byte[4];4 fixed (byte* ptr = array)5 {... 阅读全文
posted @ 2012-03-12 11:45 beetlex 阅读(3375) 评论(3) 推荐(3) 编辑
摘要: 在c#中通过foreach遍历一个列表是经常拿用的方法,使用起来也方便,性能上也和for没有多大的差别;那为什么还要注意呢?我们先下来看下以下这句话:分配的内存数量和完成测试所需的时间之间有直接关系。当我们单独查看的时候,内存分配并不是非常昂贵。但是,当内存系统只是偶尔清理不使用的内存时,问题就出现了,并且问题出现的频率和要分配的内存数量成正比。因此,你分配越多的内存,对内存进行垃圾回收的频率就越频繁,你的代码性能就会变得越差。 从上面那些话可以看到内存的回收是非常损耗资源,那我们再看下一些.net内部类型的实现。Array:// System.Arraypublic IEnumerat... 阅读全文
posted @ 2012-03-10 16:03 beetlex 阅读(16409) 评论(5) 推荐(3) 编辑
摘要: 这是针对beetle1.1进行的性能测试结果,其性能会比1.0有接近15%的提高,分别针对单一对象请求应答和列表对象请求应答来进行一个性能对比。单一对象结构: class User : IMessage { public string Name; public string EMail; public string City; public string Counrty; public void Save(BufferWriter writer) ... 阅读全文
posted @ 2012-03-09 10:58 beetlex 阅读(698) 评论(0) 推荐(0) 编辑
摘要: Ant是基于C#编写的自动更新程序,其主要目的是简单方便地对.net桌面应用程序进行自动更新,解决版本更新的烦恼。Ant主要分为三个部分:服务端,管理端和程序端。 服务端主要用于提供文件更新和下载用 管理端是用于把最新版本的程序更新到服务端 程序端,主要是获取服务端的文件信息把最新的文件更新到本地程序端使用前需要引用Ant.Component,在程序开始处使用检测代码private void Form1_Load(object sender, EventArgs e) { string host = "www.henryfan.net"; ... 阅读全文
posted @ 2012-03-04 18:13 beetlex 阅读(19840) 评论(6) 推荐(1) 编辑
摘要: tcp/ip网络通讯安全是一个广受关注的话题,现在也有一些基于tcp/ip加密技术标准如SSL,TLS等。但很多时候编写一些简单的网络通讯把这标准加密应用添加进来乎一下子把程序变得复杂了,而实现自己的加密算法那就更加不可取;其实通过一些现有的加密的技术应用完全可以实现即简单又安全的网络通讯程序。首先保证网络通讯安全有两个方面,第一保证连接的有效性,其二就是保证内容即使被人拦截也难以从内容得到相关信息。连接有效性平常写网络程序在允许一个连接接入操作的时候,我们一般要对它进行一个有效性验证,如提供用户名密码或签名。签名:通过用户提供一分数据和数据相关签名信息,对方进行一个有效性验证。那这个数据.. 阅读全文
posted @ 2012-02-27 12:10 beetlex 阅读(17977) 评论(11) 推荐(3) 编辑
摘要: 其实在tcp/ip协议中传输文件可以保证传输的有效性,但有一个问题文件传了一部分连接意外断开了怎样;那这种情况只能在重新连接后继续传输,由于文件那部分已经传了那部分没有完成并不是tcp/ip的范围,所以需要自己来制定协议达到到这个目的。实现这个续传的协议制定其实也是非常简单,通过协议把文件按块来划分,每完成一个块就打上一个标记;即使是连接断了通过标记状态就知道还需要传那些内容。下面通过beetle来实现一个简单断点续传的程序(包括服务端和客户端)。 在实现之前先整理一下流程思路,首先提交一个发送请求信息包括(文件名,块大小,块的数量等),等对方确认后就进行文件块发送,对方接收块写入后... 阅读全文
posted @ 2012-02-24 10:29 beetlex 阅读(11126) 评论(4) 推荐(4) 编辑