摘要: 针对现有.net 的socket tcp来说性能是非常不错的,以现有普通服务器的配置挂载几W以上的长连接每秒处理几W的请求应答从网络吞吐能力来说完全可以应付。不过实际应用并不可能这么简单,既然有所求就必然要处理一些逻辑上的工作。如果让一台普通服务每秒去处理几W的数据逻辑似乎有点不太现实现事情,所以就产生了这种架构的想法前置一台代理服务器,后面挂N台逻辑服务器。大概网络布局如下:从规划上用户的所有访问只需要针对代理服务器,并不用关心后面的具体工作;原理就是代理接受请求消息后把消息负载到不同的逻辑服务器处理,逻辑服务器处理完成后把结果发送给代理服务,由 代理服务再反还给具体的用户。这样即使面对.. 阅读全文
posted @ 2012-05-25 10:06 beetlex 阅读(1238) 评论(0) 推荐(3) 编辑
摘要: Smark.NetDisk是一款基于Silverlight和.net实再的网络文件管理工具,其主要目的是通过浏览器管理不同服务器的文件信息。Smark.NetDisk由两部分应用程序组成,服务端用.net实现主要功能是用户管理和用户空间分配并提供相关tcp服务;而客户端则通过Silverlight实现通过用户名登陆到不同的服务端进行文件管理。服务端功能服务端主要功能是根据需要创建用户,并指定用户具备的权限和分配对应的磁盘空间。项目代码结构:客户端功能客户端则提供比较丰富的功能: 支持目录创建 文件复制,删除,剪切和粘贴 支持在线解压和压缩文件 支持同时上专和下载文件,在不关闭浏览器的... 阅读全文
posted @ 2012-05-21 11:11 beetlex 阅读(3727) 评论(5) 推荐(3) 编辑
摘要: Beetle提供了BufferWriter和BufferReader两个对象分别把数据写入二进制流和从二进制流中读取数据,由于大部分操作是基于unsafe的实现所以其数据的写入和读取效率非常高效。由于数据类型在写入的MemoryStream的时候需要做一个byte[]的转换,而Beetle所提供的BufferWriter和BufferReader很多数据读取和写入都是指针值复制,所以在整体效率会比平常用MemoryStream写入读取数据成员相对高效。同样基于指针值复制的好处在于组件在序列化数据类型的时候不会有额外的byte[]产生,即使序列化的对象的大小和序列化的数量都会有着良好的内存使.. 阅读全文
posted @ 2012-05-18 09:53 beetlex 阅读(1610) 评论(2) 推荐(1) 编辑
摘要: 其实Flash上做通讯很多情况都选择AMF,毕竟他是AS内部基于对象进制序列协议,容量小效率高。但有时为了去调用一些已经有的Tcp服务,而这些服务并不是提供AMF支持;这时你就不得不实现一个协议的分析。其实AS提ByteArray提供了很多write和read方法,这样使我们应用起来非常方便。以下是用AS简单封装基于消息头描述大小的协议分析器。 为了更好地管理消息,通过一接口来制写消息写入和读取规范。package Beetle.AS{ import flash.utils.ByteArray; public interface IMessage { function Load(dat... 阅读全文
posted @ 2012-05-15 13:58 beetlex 阅读(3409) 评论(0) 推荐(3) 编辑
摘要: 在网络通讯中会经常面对一种情况就是信息广播转发,比较常见就是QQ群聊天。群里的人只要发一条信息就会广播到群里的其他人,不过这种转发量是非常的少一般情况下直接把通过对应用户的socket.send方法发送出去即可。但有些情况并不允可你这样,为什么呢?因为在某些场景下这些信息的转发量和密集度是非常之高,数量可以达到每少10w,20w,50w,100w或更多,也许你的服务器性能好每秒10w的IO不算什么问题,那面对一100W或更多的消息转发呢?有人会可能会问那来这么多的转发量,其实一个同场500的用户,每个用户平均每秒有两次行为改变,那就足以产生50W的转发量了。 从上面的图可以看到用户之间的... 阅读全文
posted @ 2012-05-10 09:59 beetlex 阅读(2006) 评论(5) 推荐(4) 编辑
摘要: MS给.NET的socket异步提供了IOCP的支持,对于IOCP这个模型来说相信做过网络应用的朋友都清楚他的性能。但经过.NET的包装后他的性能又是怎样呢?以下是.NET Socket的吞吐能力测试结果。测试服务端的配置为Core E4300 1.8g 2g内存win2003sp2,配置似乎有点旧,但这样更容易体现.NET Socket的性能.单一对象应答客户端发起一个请求,服务器应答后客户端再进行下一次请求.请求对象 public class Get : IMessage { public string ID; }应答对象 ... 阅读全文
posted @ 2012-05-08 09:38 beetlex 阅读(3638) 评论(10) 推荐(6) 编辑
摘要: 最近在做组件对象写入流的优化,因此对一些.net下序列化组件做了一些测试,分别针对ProtoBuf.net 和.net自带的BinaryFormatter进行了分析.从测试的结果来看BinaryFormatter的性能和ProtoBuf.net的性能足足相差了10倍。为什么差这么远呢,如果紧紧从运行时间来看可能以为BinaryFormatter一定是使用反射什么的,所以导致结果这么慢。为了更清楚的了解具体情况于是对两者的测试代码进行了一个内存分析.ProtoBuf.net的测试代码 public void PB(int count) { T... 阅读全文
posted @ 2012-05-06 10:22 beetlex 阅读(8285) 评论(5) 推荐(0) 编辑
摘要: 在编写网络通讯的时候我们经常需要把一些数据存储到byte[]中然后再发送出去,数值则是我们经常处理的数据成员。发越少的东西意味着使用更少的IO和带宽 ,所以对传输数据进行压缩也是件非常重要的事情。接下来提到的就是一种基于数字存储的方式在大多数情况下可以节省数值存储空间。 Varint 是一种紧凑的表示数字的方法。它用一个或多个字节来表示一个数字,值越小的数字使用越少的字节数。这能减少用来表示数字的字节数。比如对于 int32 类型的数字,一般需要 4 个 byte 来表示。但是采用 Varint,对于很小的 int32 类型的数字,则可以用 1 个 byte 来表示。当然凡事都有好的也有... 阅读全文
posted @ 2012-05-03 09:19 beetlex 阅读(12082) 评论(4) 推荐(3) 编辑
摘要: Beetle.SL给Silverlight提供了WCF以外的基于对象传送的Socket tcp传输功能,虽然提供了对象来描述协议但如果对其协议的封不了解那似乎和其他平台进行网络通过就比较麻烦了。虽然Beetle.SL是以对象的方式来描述协议,但其灵活度非常的高。以常见的头4字节描述消息长度为例,组件可以通过对象对现有这种协议进行描述,并通过组件进行对象信息交互。在这里介绍如何使用头4节字描述长度的分析器来进行协议分析和获取。HeadSizePackage只是一个抽象类,如果需要使用它来进行分析协议必须继承它并现实两个方法.protected abstract IMessage ReadMes. 阅读全文
posted @ 2012-05-02 09:06 beetlex 阅读(1381) 评论(4) 推荐(2) 编辑
摘要: 其实很多写.NET程序的开发人员都很喜欢通过一些计时器来看来一程序或代码的运行效率,的确这样是可以计算出代码执行所损耗的时间。但.net程序的优化不仅仅在于此.大家知道.net提供自动内存回收机制,让我们不用烦恼内存回收问题;同样.net提供给我们的内存分配机制也很出色,因为它能非常快速地帮我们进行内存分配工作。当我们在享受吃糖的乐趣的时候,别忘了这东西吃多了很容易把牙齿给搞坏的;同样.net 回收内存的时候同样也让难受,当然这些情况不会在你资源充足的时候给你带来烦恼;不过一但出现他足可以让你吃不下饭。 所以优化.net程序的时候不要忘了GC这东西,解决他的办法只有一个就是分析那里产生内... 阅读全文
posted @ 2012-04-27 12:15 beetlex 阅读(4813) 评论(15) 推荐(2) 编辑