代码改变世界

[置顶]netty中Pipeline的ChannelHandler执行顺序案例详解

2019-10-25 17:52 by 田志良, 9956 阅读, 4 推荐, 收藏, 编辑
摘要:netty的Pipeline模型用的是责任链设计模式,本文通过六组实验验证InboundHandler和OutboundHandler的执行顺序,希望对大家有帮助。 阅读全文

[置顶]socket通信服务器整体架构概述

2010-10-28 16:50 by 田志良, 34974 阅读, 40 推荐, 收藏, 编辑
摘要:Socket服务器主要用于提供高效、稳定的数据处理、消息转发等服务,它直接决定了前台应用程序的性能。我们先从整体上认识一下Socket服务器,Socket服务器从架构上一般分为:网络层、业务逻辑层、会话层、数据访问层。 阅读全文

[置顶]深入探析 socket

2010-09-08 17:28 by 田志良, 114927 阅读, 46 推荐, 收藏, 编辑
摘要:最近浏览了几篇有关Socket发送消息的文章,发现大家对Socket Send方法理解有所偏差,现将自己在开发过程中对Socket的领悟写出来,以供大家参考。   (一)架构   基于TCP协议的Socket通信,架构类似于B/S架构,一个Socket通信服务器,多个Socket通信客户端。Socket通信服务器启动时,会建立一个侦听Socket,侦听Socket将侦听到的Socket连接传给接受Socket,然后由接受Socket完成接受、发送消息,当Socket存在异常时,断开连接。在实际开发项目中,往往要求Socket通信服务器能提供高效、稳定的服务,一般会用到以下技术:双工通信、完成端口、SAEA、池、多线程、异步等。特别是池,用的比较多,池一般包括一下几种: 1)Buffer池,用于集中管控Socket缓冲区,防止内存碎片。 2)SAEA池,用于集中管控Socket,重复利用Socket。 3)SQL池,用于分离网络服务层与数据访问层(SQL的执行效率远远低于网络层执行效率)   (二)Send   主服务器接受Socket为一端口,客户端Socket为一端 阅读全文

LoadRunner压力测试心得总结

2013-04-18 09:25 by 田志良, 17929 阅读, 5 推荐, 收藏, 编辑
摘要:一、虚拟用户迭代一次的时间对整个压力场景的影响。 二、File参数化的设置。 三、场景设置。 阅读全文

理解程序内存

2012-09-20 09:29 by 田志良, 1882 阅读, 4 推荐, 收藏, 编辑
摘要:理解程序内存 来源:http://www.cnblogs.com/weiym/archive/2012/09/19/2694501.html 阅读全文

对象锁感悟

2012-07-18 14:09 by 田志良, 2506 阅读, 0 推荐, 收藏, 编辑
摘要:1、对于一个对象,读取对象元素无须加锁,增加、修改、删除、遍历须加锁。 2、如果对象a包含另外一个对象b,针对对象a的操作只要锁住对象a,针对对象b的操作只要锁住对象b。 3、如果对象a包含对象b,对象b包含对象c,对c的操作可以锁住c,可以锁住b,也可以锁住a,至于锁哪个,据具体的业务逻辑性能要求来定。 4、有时为了防止并发覆盖,可扩大锁范围。 阅读全文

MySQL性能测试

2012-07-18 13:56 by 田志良, 1956 阅读, 0 推荐, 收藏, 编辑
摘要:1、MySQL的操作速度(插入、修改、删除),受限于MySQL服务器的硬盘IO转速和网络IO速度。 2、MySQL数据库多用户多数据库连接并发执行插入/修改操作,每秒钟最大执行6500条记录。单用户单数据库连接,每秒钟最大执行950条记录。 阅读全文

反射调用性能比较(附源码)

2012-06-29 17:33 by 田志良, 6787 阅读, 7 推荐, 收藏, 编辑
摘要:本文通过编写Demo,测试“传统反射”、“实例反射”、“快速反射”、“直接调用”的性能。 阅读全文

Memcached 命令简介

2012-05-23 15:28 by 田志良, 4522 阅读, 2 推荐, 收藏, 编辑
摘要:本文简单介绍了Memcached常用的命令:add、set、replace、delete、get、gets、cas、append、prepend、flush_all。 阅读全文

如何在Windows平台下安装Memcached

2012-05-21 16:35 by 田志良, 3088 阅读, 4 推荐, 收藏, 编辑
摘要:1、解压到指定目录,如:C:\Memcached\memcached-win32-1.4.4-14。 2、用cmd打开命令窗口,转到解压的目录,输入 “memcached.exe -d install”。 3、打开控制面板,打开服务,可以看到memcached已经在上面可,如果没有启动,则手动启动一下。 4、使用telnet命令 验证缓存服务器是否可用。开始什么都不显示,回车后输入命令 stats 查看统计信息,如下图,说明服务器运作正常。 阅读全文

LoadRunner中lrs_set_recv_timeout和lrs_set_recv_timeout2的区别和联系

2012-04-27 16:08 by 田志良, 3698 阅读, 1 推荐, 收藏, 编辑
摘要:lrs_set_recv_timeout:执行lrs_receive命令后,等待服务器返回消息的超时时间,即:服务器的响应时间。 lrs_set_recv_timeout2:创建连接成功,接收到服务器返回的消息后,获取匹配消息的超时时间。lrs_receive接收到数据后,会和预期的数据长度进行比较,如果长度不匹配,它将重新从套接字上读取数据,直到超时为止。 阅读全文

LoadRunner中的异常处理

2012-04-26 15:51 by 田志良, 1772 阅读, 1 推荐, 收藏, 编辑
摘要:VuGen提供了错误处理函数lr_continue_on_error,用来在脚本中实时修改Vuser的出错设置。 阅读全文

loadrunner中的关联与参数化

2012-04-26 11:51 by 田志良, 3021 阅读, 1 推荐, 收藏, 编辑
摘要:关联(correlation):在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得到相应的值,已变量的形式替换录制时的静态值,从而向服务器发出正确的请求,这种动态获得服务器响应内容的方法被称作关联。 阅读全文

loadrunner socket 函数介绍

2012-03-20 14:48 by 田志良, 8774 阅读, 3 推荐, 收藏, 编辑
摘要:录制会话之后,通过 VuGen 的内置编辑器可以查看录制的代码。您可以在脚本中滚动,查看应用程序生成的函数,并检查传输的数 据。在主窗口中查看脚本时,可以看到VuGen 录制活动的顺序。在典型的会话期间,将录制下列函数顺序: lrs_startup 初始化 WinSock DLL lrs_create_socket 初始化套接字 lrs_send 在数据报上或者向流套接字发送数据 lrs_receive 接收来自数据报或流套接字的数据 lrs_disable_socket 禁用套接字操作 lrs_close_socket 关闭打开的套接字 lrs_cleanup 终止 WinSock DLL 的使用 VuGen 在 Windows 上使用 Windows 套接字协议支持应用程序的录制和重播;而在UNIX 平台上仅支持重播 阅读全文

性能测试工具LoadRunner中进程运行和线程运行区别

2012-01-04 15:19 by 田志良, 1722 阅读, 0 推荐, 收藏, 编辑
摘要:如果选择按照线程方式运行,在默认情况下,controller为每50个用户仅启动一个mmdrv进程,而每个用户都按线程方式来运行,这些线程用户将共享父进程的内存段,这就节省了大量内存空间,从而可以在一个负载生成器上运行更多的用户。 阅读全文

LoadRunner参数化

2012-01-04 15:18 by 田志良, 1608 阅读, 1 推荐, 收藏, 编辑
摘要:Sequential:顺序地向Vuser分配数据。 Random:当测试开始运行时,“随机”方法为每个Vuser分配一个数据表中的随机值。 Unique:为每一个Vuser的参数分配一个唯一的顺序值。在这种情况下必须确保表中的数据对所有的Vuser 阅读全文

C#设计模式(外观模式)

2011-09-30 11:06 by 田志良, 4590 阅读, 4 推荐, 收藏, 编辑
摘要:如果要观看电影,必须在客户端执行下面的操作:先打开投影仪,再打开功放机,再打开屏幕,再打开 DVD 播放机,再打开灯光,在经历了这么多操作后,才可以看一场电影。而在关闭电影的时候,也要先关闭投影仪,再关闭功放机,再关闭屏幕,再关闭 DVD 播放机,再关闭灯光。哦,这是太复杂了!!!在客户端居然有那么多操作,如果有一些用户不知道如何使用其中的一个工具,那他便看不了电影! 阅读全文

C#设计模式(适配器模式)

2011-09-29 16:50 by 田志良, 6115 阅读, 2 推荐, 收藏, 编辑
摘要:众所周知,在中国通用的电压时 220V,而美国电压则是 110V,如果有经常在美国和中国之间跑的 IT 人,而其笔记本都是随身携带的,那么它的笔记本的电压问题如何解决呢?(因为在美国和中国电压不同,所以一般的电器会不通用的)而适配器在这个问题上体现得淋漓尽致。现在的笔记本都有一个电源适配器,而正是这个电源适配器来解决上面提到的适配器问题,比如,一款索尼笔记本,其输入电流为交流100V~240V,而输出则是统一的直流 19.5V,在电源适配器的一端输入交流电流,然后通过电源适配器把电源变成需要的电压,也就是适配器的作用是使得一个东西适合另外一个东西。 阅读全文

WCF 快速入门

2011-08-09 16:56 by 田志良, 6514 阅读, 2 推荐, 收藏, 编辑
摘要:构建HelloWCF应用的第一步是创建服务契约。契约式是表示消息应用外形的主要方式。对于外形,是指服务暴露的操作,使用的消息schema和每个操作实现的消息交换模式(MEP)。总之,契约定义了我们消息应用生成和使用的东西。大多数契约是带有WCF API定义的属性标记的类型定义。 阅读全文

WCF 消息拓扑和消息编排

2011-07-28 16:54 by 田志良, 1334 阅读, 2 推荐, 收藏, 编辑
摘要:消息拓扑描述的是在一个或多个发送者和接受者之间消息如何发送的。消息拓扑可以描述简单的应用-应用的连接关系,但是它同样可以描述复杂的应用-企业的连接。概括地说,这些可能存在的拓扑结构比面向组件的应用系统能够涉及到的情况会更加多、更加复杂。 阅读全文

WCF 消息交换模式

2011-07-28 10:57 by 田志良, 1866 阅读, 3 推荐, 收藏, 编辑
摘要:我们描述消息交换最常用的细节粒度就是消息交换模式(MEP)。根据W3C草案(http://www.w3.org/2002/ws/cg/2/07/meps.html),一个MEP是“一个描述在消息参与者之间交换的消息的模板。”一个MEP被限制在一个发送者和接收者之间的逻辑连接上,整个行业也已经接收了这个事实。因为MEPS是个有点抽象的概念,近距离看一些现实世界的例子对于我们弄清MEPs这个概念有帮助。让我们来看看下面我和朋友关于足球票通话的例子: 阅读全文

WCF 面向服务的意义

2011-07-26 16:50 by 田志良, 1197 阅读, 2 推荐, 收藏, 编辑
摘要:“为什么我们需要面向服务?”回答很简单:可伸缩性、维护性、互操作性和灵活性。过去,分布式组件技术像COM紧紧地把所有的组件绑定到一起。最低限度上,这些分布式技术必须分享公共类型系统,并且常常是一个运行时。有了这些依赖,升级和软件升级变得复杂、费时和费力的。面向服务的应用系统,恰恰相反,不需要相同类型的依赖,因此显示出更加适合企业精算需求的行为。 阅读全文

WCF 面向服务的SOAP消息

2011-07-26 16:21 by 田志良, 4301 阅读, 2 推荐, 收藏, 编辑
摘要:显然地,面向服务系统开发首先应该是创建契约。为了例子简单,一个订单包含一个产品ID(product ID)、数量(quantity)和状态消息(status message)。有了这三个字段,一个订单可以使用下面的伪schema代码表示: 阅读全文

WCF 面向服务的4个原则

2011-07-26 15:07 by 田志良, 1061 阅读, 1 推荐, 收藏, 编辑
摘要:面向服务里,服务可以与每个其它的服务通过消息交互。换句话说,服务可以穿越边界发送消息给其它服务。服务可以发送和接收消息,并且能被发送和接受的消息形状定义了服务的边界。这些边界被良好地定义,清晰地表示,并且是唯一的服务功能访问点。更实际点,如果服务1要和服务2交互,服务1必须发送消息给服务2.相反,一个面向对象或者面向组件的世界里,要求服务1应该创建一个服务2的实例(或者一个服务2的代理)。这个例子里,这些服务间的边界变得模糊了,因为服务1为了所有的目的,被服务2所控制。 阅读全文

WCF 填写消息地址

2011-07-26 11:31 by 田志良, 888 阅读, 2 推荐, 收藏, 编辑
摘要:现在我们已经看过了与消息交互的实体,详细剖析了消息结构,然后看了一下WCF提供了几个消息编码器,现在我们来看一下如何在详细发送的时候表示我们要发送的目的地。毕竟,除非能发送给接受者,否则消息等于是毫无用处。和邮政服务需要一个良好格式的地址结构一样,面向服务的消息同样也需要一个定义良好的地址结构。这节里,我们将会建立自己的地址结构(Scheme),看它可以不可以广泛适用于所有的消息应用系统,然后把它关联到那个和WCF消息一起使用的地址结构上。 阅读全文

WCF 消息编码

2011-07-25 17:06 by 田志良, 2308 阅读, 2 推荐, 收藏, 编辑
摘要:随着时间的流逝,也许我们会条件反射式地认为XML(SOAP)是一个结构文本。毕竟,文本是人可读的,每个计算机系统也可以处理文本。基于文本的XML的普遍共性与我们的与其它系统交互的想法产生了共鸣。可以容易的解释的基于文本的XML本质上会体积变大。可以理解使用XML会带来性能损失。就像要花费点精力把信装到信封里一样,它需要一些处理时间与XML交互。某些情况下,基于文本的XML数据大小限制了它的应用,特别是当我们要通过网络发送一个XML消息的时候。 阅读全文

WCF SOAP消息剖析

2011-07-22 16:06 by 田志良, 3748 阅读, 3 推荐, 收藏, 编辑
摘要:小时候,我们学习到邮票应该贴在信封的右上角,地址应该写在中间。如果我们愿意,可以增加一个回复地址在信封的左上角。所有被处理的信件必须遵守这个基本的结构。如果格式不对,或者地址不清晰,或者地址不合法,邮政服务会认为这个邮件无效,并且无法投递。如果我们幸运的话,邮件会被退回(如果写地址的话)。可以想象没写地址有多混乱。如果发送者可以允许乱放邮票或者地址,邮政服务需要查遍整个信封来确定邮票和地址。很可能,为了完成新加投递任务,每次可能要增加远多于2美分的邮资。实际上,邮局定义的信封结构,从发信人角度来看,会改进信件处理的效率和一致性而不需要牺牲可用性。 阅读全文

WCF消息参与者

2011-07-22 15:36 by 田志良, 819 阅读, 2 推荐, 收藏, 编辑
摘要:在面向服务的应用中,消息是通信的基本单位。因此,面向服务的应用通常被称为消息应用系统。在某一时刻,每个面向服务的应用系统都会发送或者接受消息。这个能够帮助你理解面向服务的消息很像你在Email系统里收到的信件一样。在邮件系统里,一个信件是抽象的实体:它可以包涵任何类型的信息,可以以不同的形式和大小存在,可以关联任何东西。同样,一个面向服务的消息也是一个抽象实体:它几乎可以包涵任何数据,可以使用许多不同的方式编码,并且可以关联到虚拟东西,甚至是其它消息。邮件的一些属性已经被广泛接受。例如,一封信件可以被某个人发送,邮寄给某个人,并且可能被某个人投递(某一时刻更多的是“可能”)。同样,一个面向服务的消息可以被计算机发送,发送给另一个计算机,并且可能由另外的计算机来投递。考虑某些喜欢死扣理论的书呆子,我必须澄清,与面向服务消息交互的实体不一定必须是计算机。理论上说,它们可以是信鸽,拉布拉多猎犬或者是狮虎。无论如何,这些与面向服务消息交互的实体被称作消息的参与者,并且在这本书里,一个消息参与者可以是一个计算机上的进程。 阅读全文

C#实现动态生成Word

2011-07-07 10:14 by 田志良, 11073 阅读, 4 推荐, 收藏, 编辑
摘要:本篇文章主要介绍一个控制台例子,实现动态生成Word文件。 阅读全文

怎样编写注册表reg文件

2011-07-06 17:03 by 田志良, 2682 阅读, 3 推荐, 收藏, 编辑
摘要:1、开头第一行一定是:“REGEDIT4”或“Windows Registry Editor Version 5.00”,以区别操作系统; 2、注册表信息头尾用“[”与“]”包起来; 3、" "内就是字符串内容; 4、“DWORD”为“0”就是用“dword:00000000”表示,因为“DWORD”值是16进位,16进位的“0”就是“00000000”。 5、因为本例中只有一行注册表信息([HKEY_CURRENT_USER\Software\Mi...]),所以没有空行。而如果有两个以上的注册表信息,信息与信息之间就需要有空行隔开。 6、如果要删除某个注册表信息该怎么办?很简单,在注册表信息前面加上“-”(减)号 阅读全文

避免 TCP/IP 端口耗尽

2011-06-27 11:45 by 田志良, 5936 阅读, 3 推荐, 收藏, 编辑
摘要:当客户端启动到服务器的 TCP/IP 套接字连接时,客户端通常连接到服务器上的特定端口,并请求服务器通过临时(或暂时)TCP 或 UDP 端口进行响应。在 Windows Server 2003 和 Windows XP 中,客户端应用程序所使用的临时端口的默认范围为 1025 到 5000。在某些情况下,有可能耗尽默认范围的可用端口。 阅读全文

一个误解: 单个服务器程序可承受最大连接数“理论”上是“65535”

2011-06-13 11:47 by 田志良, 23686 阅读, 8 推荐, 收藏, 编辑
摘要:请注意,这里有两个词分别被我标记上了引号,一个是“理论”,一个是“65535”。强调“理论”这个词,是想特别明确误解者的意思:就是说,这个值是不可能被打破的,是铁板钉丁的。而65535这个数字的由来,很多人想当然地将它与port最大值联系起来。的确,TCP的端口数,最大值确实为65535。但是,这并不代表一个服务器可以接受的连接数就是这个值,很多人之所以把这两个概念搞混淆是因为对socket和port没有更深的认识和理解。 阅读全文