ESFramework 4.0 概述

     要想成为一个通信程序的开发高手,能够开发出稳定的、高效的、伸缩性好、可扩展性强的、单机承载数千甚至上万用户同时在线的网络应用系统,一般至少需要3年以上磨练与经验积累。积累过程中所经历的种种折磨,过来人一定都深有体会 -- 经常地加班加点、熬夜调试、就连做梦的时候都在想着那些不经常出现的bug究竟是什么原因导致的、要如何解决。

     支持巨大并发的通信程序的开发是非常复杂的,其涉及到很多方面的专业知识,像TCP、UDP协议、Socket开发、多线程编程、线程池、并发架构、分布式架构、完成端口(IOCP)模型、异步编程模型、设计模式等等。
     而现在,所有这些经验的结晶都浓缩在ESFramework框架中。ESFramework,是一套可高度复用的、灵活的、单纯而又强大的.NET通信框架,全部采用C#编写。ESFramework内置了对Tcp和Udp的支持,并且支持文本协议和流协议,提供了多种网络引擎供服务端和客户端开发人员轻松使用。采用ESFramework框架,使得您不需要了解Socket、不用再关心底层与通信相关的一切琐碎的事情,就可以在一个更高的层次上更快地开发属于您的高效稳定的网络通信应用。像IM系统、视频会议系统、数据采集系统、MMORPG、WebGame、在线休闲游戏等,凡是需要分布式通信的系统都可以使用ESFramework框架。(ESFramework 4.0 有哪些优点?

 

      04年开始进行网络通信程序开发,到06年第一次发布ESFramework的相关介绍以来,ESFramework已经走过了4个年头,ESFramework也从0.1版本成长到4.0。ESFramework 4.0 已经不再是一个简单的通信框架,而是形成了一个解决巨大量(百万级)用户同时在线的高性能的通信体系和完整的解决方案。  

  ESFramework的层级结构如下所示:

  

  你的通信应用程序可以基于图中的任何一层来构建,但是选择的层次越高,框架帮你做的事情也就越多,你的开发也就越高效和快速。我们来粗略地看看每一层。

一.ESFramework

  ESFramework 作为通信框架的核心,定义了消息处理的骨架流程,提供了多种通信引擎实现,相对单纯而稳定。在4年前,这个核心基本已经形成,我们再回顾一下消息处理的骨架流程: 

 

    其特性列表如下:
(01)提供服务端通信引擎。
(02)提供客户端通信引擎。
(03)支持TCP协议和UDP协议。
(04)支持基于文本的通信消息和基于二进制的通信消息。
(05)支持消息拦截,如消息加密、压缩等
(06)增强的UDP引擎,提供可靠的UDP通信。
(07)TCP客户端引擎支持Sock5代理。

(08)完整的异常日志记录。
(09)支持将异步的消息(请求/回复)转化为同步的方法调用。
(10)在线用户管理、心跳检测。
(11)TCP客户端掉线后自动重连。
(12)支持挂接P2P通道。

 

   1. 通信引擎接口继承关系图

 

  

     

 

 

  2.内置通信引擎列表

   ESFramework内置了多种通信引擎,以完全支持“客户端/服务端、TCP/UDP、文本协议/二进制协议”这些特性的组合。

  

 

  3.在线用户管理

   服务端通过ESFramework.Server.UserManagement.IUserManager来管理所有的在线用户。

 

 

二.ESPlus

 ESPlus 直接建立在ESFramework之上,ESPlus为ESFramework增强了许多常用的功能,用于快速高效地构建具体应用程序。

1.特性列表:

(01)常用的消息头(基于文本或二进制)
(02)常用的IContractHelper实现
(03)消息类型综合管理(MessageTypeRoomManager)
(04)可扩展的服务端P2P消息处理器(P2PMessageProcesser)。
(05)可扩展的服务端Broadcast消息处理器(BroadcastMessageProcesser)。

(06)动态的基于插件的消息处理器。
(07)文件收发器(FileTransceiver),支持文件断点续传功能。

 

2.扩展应用特性:
(01)基础消息处理结构:登录/登出/心跳/同名登录处理/超时通知/挤掉线通知/踢出通知/获取自己的IPE
(02)CustomizeInfo:支持使用自定义信息来进行服务器/客户端、客户端/客户端之间的交互。
(03)FileTransfering:文件的发送与接收及其相关控制。
(04)P2PSession:P2P打洞以及P2P通道管理。

(05)Group:静态组/动态组管理。
(06)Friend:好友管理。

3.常用的窗口组件:
(01)MainServerForm:服务端主窗体,显示在线用户、线程数、连接数等信息,并提供自定义功能。
(02)EnhancedUdpSessionStateViewer:用于显示基于增强的UDP协议的每个Session的实时状态。
(03)FileTransferingViewer:用于显示所有文件传递的进度和状态信息。

 

4.自定义ESFramework增强

 如果你需要自定义ESFramework增强,遵守ESPlus 增强层的规则,将可以使你自定义的增强无缝地与ESPlus集成。ESPlus 增强规则如下:
(01)一个标准的ESPlus 增强层至少包含三块:Contract、Server、Passive
(02)与该扩展相关的所有消息属于同一个消息分组。实现IMessageTypeRoom接口以表示这个分组。
(03)为上述消息分组中的每个类型的消息创建对应的消息协议。
(04)添加Server端使用的消息处理器和相关所需的组件
(05)添加Clientr端使用的消息处理器、IOutter接口实现、以及相关所需的组件   

 

5.Rapid引擎 

    ESPlus.Rapid命名空间为快速开发基于ESFramework应用的提供了数个组件,使得你可以仅用1-2个小时就可以上手ESFramework通信程序开发可以通过这篇文章来了解如何使用ESPlus.Rapid快速开发基于ESFramework的通信程序。             

 

  

三.ESFramework.SL

 

   如果您的通信应用的客户端是基于Silverlight开发的,那么可以直接使用ESFramework.SL来与基于ESFramework的服务端进行高效地通信。ESFramework.SL内置的TCP客户端引擎采用了与Rapid客户端引擎完全一致的封装,如果您已经了解了ESPlus提供的Rapid引擎,那么就可以直接上手ESFramework.SL开发

 

 

四.ESPlatform

 

   ESPlatform 旨在协助快速构建大型(百万人同时在线)通信应用。ESPlatform支持三种群集(Cluster)模型:垂直分割模型、水平分割模型、交叉模型(垂直分割与水平分割相结合)。 如果你的通信应用是基于ESFramework构建的,那么当同时在线的用户人数剧增时,就可以非常容易地迁移到ESPlatform(有些迁移也许只要修改一下配置就可以),以解决巨大并发的问题。关于ESPlatform的介绍可参见这里

      

  

快速上手系列:

    ESFramework 4.0 快速上手 -- Rapid引擎

    ESFramework 4.0 快速上手 -- Rapid引擎(续)   

    ESFramework 4.0 快速上手 -- 如何使用自定义消息?

    ESFramework 4.0 快速上手 -- 离线消息如何实现?

    ESFramework 4.0 快速上手 -- 玩的就是“心跳”

    ESFramework 4.0 快速上手 -- 重登陆模式

    ESFramework 4.0 快速上手 -- 异常日志

    ESFramework 4.0 快速上手 -- 在Silverlight中使用ESFramework

    ESFramework 4.0 快速上手 -- 监控自定义信息

    ESFramework 4.0 快速上手 -- 使用紧凑的序列化器,数倍提升性能 

    ESFramework 4.0 快速上手 -- 使用ACK机制发送自定义信息

    ESFramework 4.0 快速上手 -- 文件传送,如此简单

    ESFramework 4.0 快速上手 -- 客户端登录验证

    ESFramework 4.0 快速上手 -- 入门Demo,一个简单的IM系统(附源码) 

    ESFramework 4.0 快速上手 -- 聊天系统Demo,增加Silverlight客户端(附源码)

    ESFramework 4.0 快速上手 -- 聊天系统Demo,增加文件传送功能(附源码)

 

高级进阶系列:

  ESFramework 4.0 进阶(01)-- 消息

    ESFramework 4.0 进阶(02)-- 核心:消息处理的骨架流程

    ESFramework 4.0 进阶(03)-- 驱动力:通信引擎(上)

    ESFramework 4.0 进阶(04)-- 驱动力:通信引擎(下)

    ESFramework 4.0 进阶(05)-- 在线用户管理

    ESFramework 4.0 进阶(06)-- 正规消息发送器

    ESFramework 4.0 进阶(07)-- 消息同步调用

    ESFramework 4.0 进阶(08)-- 挂接P2P通道

    ESFramework 4.0 进阶(09)-- ESPlatform 支持的三种群集模型

    ESFramework 4.0 进阶(10)-- 垂直分割群集模型与多通道引擎

    ESFramework 4.0 进阶(11)-- 好友与组

    ESFramework 4.0 进阶(12)-- 文件断点续传原理与实现 

     

更多介绍:     

    ESFramework 4.0 有哪些优点?   

    ESFramework 4.0 性能测试 

    ESFramework 4.0 版本升级说明(持续更新)

         

      

相关下载   

     ESFramework下载以及ESFramework的最新进展,请访问http://www.oraycn.com/ 或 http://www.cnblogs.com/oraycn/,或QQ:372841921 

 

 

posted on 2010-08-12 15:54 zhuweisky 阅读(11416) 评论(59) 编辑 收藏

评论

#1楼 2010-08-12 16:23 冰品羽扇      

支持下,久违的老朱,不对应该叫朱老总了。可惜我们游戏团队现在只能用C++ TNL框架写,闲时再学习学习你的新东东。  回复 引用 查看   

#2楼 2010-08-12 16:33 温景良(Jason)      

呵呵,很久都没有看到更新了  回复 引用 查看   

#3楼 2010-08-12 16:36 温景良(Jason)      

开源为什么不在codeplex上建个项目啊,都不知道去哪里下载  回复 引用 查看   

#4楼 2010-08-12 20:30 zhuweizz      

我给你邮件了 有事情咨询  回复 引用 查看   

#5楼 2010-08-12 22:42 C雷      

无条件支持!  回复 引用 查看   

#6楼 2010-08-13 09:30 ToBin      

能用于mmrpg游戏的通信嘛  回复 引用 查看   

#7楼[楼主] 2010-08-13 10:57 zhuweisky      

引用ToBin:能用于mmrpg游戏的通信嘛

当然可以,ESFramework已成功应用在棋牌游戏、呼叫控制系统、数据采集系统等系统中。  回复 引用 查看   

#8楼 2010-08-15 17:17 justnow      

顶!很少看到如此强大的通信框架发布出来,呵呵  回复 引用 查看   

#9楼 2010-08-15 18:43 Vseen[ Aloner ]      

打心底的佩服。研制卓越的框架,一直是我的心愿之一。
距离甚远,佩服。
 回复 引用 查看   

#10楼 2010-09-01 23:24 huoxicai      

请问下那里可以下载的到  回复 引用 查看   

#11楼[楼主] 2010-09-02 22:48 zhuweisky      

引用huoxicai:请问下那里可以下载的到

http://files.cnblogs.com/zhuweisky/ESFramework.Rapid_Demo.rar  回复 引用 查看   

#12楼 2010-09-07 14:28 Johnses      

这套组件得买多少钱哟~~~,怎么获得授权?  回复 引用 查看   

#13楼 2010-09-11 16:03 qianyz      

 回复 引用 查看   

#14楼 2010-09-13 06:59 水影倒影      

这套组件得买多少钱哟~~~,怎么获得授权?
 回复 引用 查看   

#15楼 2010-09-13 08:50 专业.NET组件SDK      

@水影倒影:
是有免费版本的,是不要钱的。
 回复 引用 查看   

#16楼 2010-09-28 18:58 Stoneson      

看了你的东东后开朗了好多.我一直在搞.NET通讯方面,快没信心了.看了你的东东后有信心多了  回复 引用 查看   

#17楼 2010-10-17 15:17 wenjie      

感谢楼主辛勤的,卓越的工作,为我们提供了这么好的学习材料。 早在06年第一个版本发布之前就关注楼主的文章,历经0.1,0.2.1,2.0beta,3.0.4.0版本,伴随着ESFramework一起进步,从esFramework框架中学到了不少知识。这个学习过程是辛苦的,也是值得的,起初对网络编程知之甚少,基础知识也不了解,周围又没有了解这方面的人,自己一点点的感悟,理解,四年之中把许多业余时间都花在这方面,中间几次放弃,几次继续,到今年终于对网络编程有了些解,能用ESFramework进行一些简单的开发。 再次对楼主说声谢谢。  回复 引用 查看   

#18楼 2010-11-06 08:00 wenjie      

楼主 不知道有没有最近版本的高级示例,希望学习一下 谢谢  回复 引用 查看   

#19楼 2010-11-06 16:03 藜洛汐      

你好,请问免费版本和授权版本有啥区别呢?提个建议,楼主现在应该做的是推广你的框架哦,等知名度提高了,再赚钱不迟....  回复 引用 查看   

#20楼[楼主] 2011-02-25 11:53 zhuweisky      

引用藜洛汐:你好,请问免费版本和授权版本有啥区别呢?提个建议,楼主现在应该做的是推广你的框架哦,等知名度提高了,再赚钱不迟....

Free版本最大连接数为20,其它方面与正式版完全一样。  回复 引用 查看   

#21楼 2011-02-25 12:55 wenjie      

个人感觉,如果要推广,esplus收费的方式是比较可行的。  回复 引用 查看   

#22楼 2011-02-25 20:12 爱在两腿间      

和WCF相比 有那些优势呢  回复 引用 查看   

#23楼 2011-03-07 00:48 夜猫范      

没有开源 没法用到项目中 楼主有无 开源版本?  回复 引用 查看   

#24楼[楼主] 2011-03-07 08:38 zhuweisky      

引用夜猫范:没有开源 没法用到项目中 楼主有无 开源版本?

没有开源版本,只有免费版本很完整的帮助文档。现在有将近十个公司使用了该框架了。  回复 引用 查看   

#25楼 2011-03-19 12:33 justnow      

确实不错,我们公司在呼叫控制系统中使用了ESFramework最为底层通信框架,非常爽。好用,稳定、高效名副其实。  回复 引用 查看   

#26楼 2011-03-21 14:18 李磊(leige)      

有时间学学,楼主辛苦了!  回复 引用 查看   

#27楼 2011-03-25 15:04 重庆加戈      

对收费版价格很有兴趣...购买地址在哪点嘛?  回复 引用 查看   

#28楼[楼主] 2011-03-25 15:16 zhuweisky      

引用重庆加戈:对收费版价格很有兴趣...购买地址在哪点嘛?

请加QQ:372841921  回复 引用 查看   

#29楼 2011-04-15 08:38       

引用zhuweisky:
引用ToBin:能用于mmrpg游戏的通信嘛

当然可以,ESFramework已成功应用在棋牌游戏、呼叫控制系统、数据采集系统等系统中。


问一下,可以应用到 串口通信 方面吗  回复 引用 查看   

#30楼[楼主] 2011-04-15 08:43 zhuweisky      

@寕:ESFramework是基于SOCKET的,支持TCP和UDP,不支持串口。  回复 引用 查看   

#31楼 2011-04-19 13:12 边城浪      

能否用于webgame的开发.服务端用你这个.客户端用flash的.是否还需要自己实现相关协议?  回复 引用 查看   

#32楼[楼主] 2011-04-19 14:17 zhuweisky      

引用边城浪:能否用于webgame的开发.服务端用你这个.客户端用flash的.是否还需要自己实现相关协议?

已经有同样的案例。flash客户端只要遵循ESFramework规定了协议格式,就可以与ESFramework的服务端通信,并且使用ESFramework服务端甚至ESPlatform的所有功能。ESFramework现已支持Silverlight客户端,以后可能会直接增加flash客户端开发包。更多详情请咨询QQ:372841921  回复 引用 查看   

#33楼 2011-04-19 17:46 myqhit      

很强悍,偶尔看到  回复 引用 查看   

#34楼 2011-04-20 16:06 桃花雪      

wcf  回复 引用 查看   

#35楼 2011-04-25 11:11 风的传说      

免费吗,呵呵  回复 引用 查看   

#36楼 2011-05-18 23:48 翟士丹      

免费版本的ESFramework只能支持最大10个链接么?  回复 引用 查看   

#37楼 2011-05-22 08:54 wenjie      

朱老大好,您好, Esframework中,每当有消息来时或消息发送时,服务器引擎都会通过UserManagerBridge中的MessageReceived事件 和MessageSent事件触发UserManager中的相关方法。 这样的话每次有消息来时,不论是什么消息,都会调用RegisterUser 和 ActivateUser 方法。 是否把RegisterUser方法,可以放到BasicMessageProcesser的登录消息处理器中,ActivateUser方法放到心跳消息处理器中,这样的话,当不是登录消息和心跳消息的时候就不用检测了。 UserManagerBridege中的MessageSent事件,如果不需要记录发送了什么数据,也是可以去掉的。 敬请指正。
 回复 引用 查看   

#38楼[楼主] 2011-05-23 08:34 zhuweisky      

每次有消息来时,不论是什么消息,都会调用RegisterUser 和 ActivateUser 方法,这正是为了激活用户的心跳,否则可能会导致用户心跳超时。心跳检测属于ESFramework的用户管理部分,没有ESPlus,它也是可以正常工作的,如果放到BasicMessageProcesser中,就强行将ESPlus绑定给ESFramework了。正如在概述中讲的一样,我们的应用程序是可以抛开ESPlus直接基于ESFraemwork构建的.  回复 引用 查看   

#39楼 2011-05-23 12:19 wenjie      

明白了您的思路。还是有疑问,如果ActivateUser方法放到心跳消息处理器中的话,为什么会容易导致心跳超时 ?(按照我得理解,客户端每10秒发送一个心跳检测包,服务器心跳超时存续期30秒,应该不会有什么问题)。另外我对消息的概念也不是很清晰,请教一下,比如说客户端上传一个文件,分20个包,对服务器来说是收到20次消息的么,亦或是比20次多?客户端提交一次数据,是一次消息么,还是算多次消息。每次消息来时,都遍历当前用户,会导致服务器开销么?或者是这个开销可以忽略不计的?  回复 引用 查看   

#40楼[楼主] 2011-05-23 14:26 zhuweisky      

@wenjie
(1)将ActivateUser方法放到心跳消息处理器中调用,并不会容易导致心跳超时。关键点在于,消息处理器是位于ESPlus中的,而ESFramework脱离了ESPlus,也是可以正常工作的。所以,现有的方式,在脱离ESPlus的情况下,服务端的心跳检测机制也是可以正常工作的,使用者不需要手动再去调用ActivateUser。
(2)客户端提交一次数据,服务端可能需要多次接收,但是ESF底层会将它们重组为一个。
(3)每次消息来时,不会遍历当前所有用户,采用了类似二分查找,开销微乎其微。
 回复 引用 查看   

#41楼 2011-05-23 15:39 wenjie      

谢谢您的回复 又明白不少 您的这个框架非常值得学习 很优美  回复 引用 查看   

#42楼[楼主] 2011-05-23 16:03 zhuweisky      

引用wenjie:谢谢您的回复 又明白不少 您的这个框架非常值得学习 很优美

请多提建议,呵呵。  回复 引用 查看   

#43楼 2011-05-24 05:45 wenjie      

我最近在做测试的时候发现用VMware (虚拟机)做服务器的话,好像不是很稳定,而用真实的服务器则没有问题。是不是虚拟机不适合做Tcp服务器呢?  回复 引用 查看   

#44楼[楼主] 2011-05-24 09:06 zhuweisky      

@wenjie
肯定的。服务器最基础的要求就是单纯、可靠、高性能。也没有谁会真的用虚拟机做服务器的,呵呵
 回复 引用 查看   

#45楼 2011-05-29 08:54 wenjie      

朱老大好,最近研究帮助文档,看到:TCP服务端引擎。 注意: (1)如果操作系统支持的话(如Win2k,2003),NetworkStream.BeginRead 将启用IOCP线程池的线程来回调消息处理方法(BeginRead的第四个参数指向的方法)。 (2)对于服务端的TCP引擎,建议将HandleMessageAsynchronismly设置为false。如果OS支持,将启用IOCP线程来处理消息。 (1)是理解的 networkstream.beginread自动启动iocp接收数据,对于(2)不是很明白,操作系统用iocp接收完数据后,依然会用接收数据的iocp线程处理数据么?HandleMessageAsynchronismly设置为false有什么优点啊,设为True的话会另外开一个线程处理数据么 谢谢  回复 引用 查看   

#46楼 2011-05-29 09:03 wenjie      

在INetEngine接中,对HandleMessageAsynchronismly有这样的描述:是否异步处理消息,默认值false(即在接收消息的线程中处理消息)。
如果为false,表示同步处理消息,在这种情况下,需要特别注意, 在前一条消息的处理中,不能使用后续的消息(比如,通过ServerAgent将消息转换为方法调用),否则会导致无限阻塞。

有1点没有理解清楚: handleMessageAsynchronismly=false时,能否使用ServerAgent的方法调用 。 希望老大指点一二 谢谢
 回复 引用 查看   

#47楼 2011-05-29 09:20 wenjie      

在客户端:如果通过ServerAgent将消息转换为方法调用,那么在服务器端,会使得前一条消息的处理中, 使用了后续的消息么? 什么情况下,前一条消息会使用后续的消息啊?能否举个例子啊 谢谢 谢谢  回复 引用 查看   

#48楼 2011-05-30 16:31 wenjie      

朱老大好,最近用esframework做个测试,客户端某个页面,用定时器System.Windows.Forms.Timer.OnTick每10秒向服务器端发送一个请求,偶尔会出现“接收回复消息超时 !”的异常(大部分情况下是正常的),错误消息如下:************** 异常文本 **************
System.Exception: 接收回复消息超时 !
在 ESFramework.Passive.ResponseManager.PickupResponse(Int32 messageType, Int32 messageID)
在 ESFramework.Passive.ServerAgent.CommitRequest(IMessage requestMsg, DataPriority dataPriority, Boolean checkRespond)
在 ESFramework.Passive.MessageTransceiver.CommitRequest(IMessage requestMsg, DataPriority dataPriority, Boolean checkRespond)
请问,是因为使用了Timer的原因么?

之所以想是Timer的原因,是因为其他地方暂时还没有跳出这个异常
 回复 引用 查看   

#49楼[楼主] 2011-05-31 10:37 zhuweisky      

@wenjie
客户端超时收不到回复,可以检查一下
(1)服务端的业务处理是否抛出了异常,这可以查看服务端的日志文件。
(2)在发送请求的时刻 是否客户端遭遇了断线重连?
可以加我QQ 51025354 详细讨论。呵呵
 回复 引用 查看   

#50楼 2011-06-01 11:57 wenjie      

谢谢回复, 我找到原因了,服务器端没有从数据库获取到数据,
至于为什么获取不到,还没找到原因,我再测试测试
 回复 引用 查看   

#51楼[楼主] 2011-06-01 14:23 zhuweisky      

@wenjie
Good
 回复 引用 查看   

#52楼 2011-07-14 14:35 wangyue1987      

从李建忠的面向对象 设计模式 WebCast 视频看起就觉得 面向对象
不是简简单单的了
在Adapter模式中,
看到了搞可复用类库的介绍(知识一笔带过)
但是,我决心到网上搜上一搜
所以就发现这个产品了
听说这个已经相当成熟了
所以说
决定研究
而且是深究啊

谢谢你提供这么好的系列
供大家学习
 回复 引用 查看   

#53楼 2011-07-15 18:16 wenjie      

确实值得学习  回复 引用 查看   

#54楼 2011-08-25 09:49 sweetwxh      

早没看到这个框架,之前做网络游戏的服务器框架,花了我大量的时间啊~不过后期还是决定采用C++来做。  回复 引用 查看   

#55楼 2011-09-01 17:09 边城浪      

我想用Flash的客户端跟ESFramework通信,客户端使用ActionScript来编写,能不能提供ESFramework的协议规范?  回复 引用 查看   

#56楼[楼主] 2011-09-01 19:44 zhuweisky      

引用边城浪:我想用Flash的客户端跟ESFramework通信,客户端使用ActionScript来编写,能不能提供ESFramework的协议规范?

当然可以的,请联系QQ:372841921。  回复 引用 查看   

#57楼 2011-09-15 05:00 ha666      

可以提供一段异步tcp客户端的实现代码吗?我想看看是不是真的像大家说得那么好?  回复 引用 查看   

#58楼[楼主] 2011-09-15 21:04 zhuweisky      

引用ha666:可以提供一段异步tcp客户端的实现代码吗?我想看看是不是真的像大家说得那么好?

欢迎测试:http://www.cnblogs.com/zhuweisky/archive/2010/09/11/1823879.html  回复 引用 查看   

#59楼 2011-11-08 08:09 火地晋      

这句话深有体会
“就连做梦的时候都在想着那些不经常出现的bug究竟是什么原因导致的、要如何解决。”
最痛苦的莫过于做梦的时候梦到死循环的代码。
 回复 引用 查看   

导航

公告

             

人的灵魂要强,

接受人的脆弱。

昵称:zhuweisky
园龄:6年7个月
荣誉:推荐博客
粉丝:210
关注:10

统计

搜索

 
 

随笔分类(267)

随笔档案(283)

积分与排名

最新评论

阅读排行榜

推荐排行榜