自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zhuweisky

不为繁华易匠心

  • 博客(24)
  • 资源 (5)
  • 收藏
  • 关注

原创 ESFramework解疑 --点滴(不断补充中)

1.IMessageHeader的实现在哪里?(2006.03.31)     MSN上有个叫MeDiar的朋友问我ESFramework中IMessageHeader的实现在哪里?答案是,IMessageHeader在你的具体应用中实现,而不是在ESFramework框架中。    IMessageHeader仅仅规定了你的消息头中至少应该包含的内容(如果你的应用需要,还可以将更多的内

2006-03-31 15:58:00 1089

原创 ESFramework介绍之(18)―― Tcp用户管理器组件

    当我们的应用中客户端与AS之间是通过Tcp进行通信的时候,通常,应用也要求管理所有在线的用户。这种管理至少包含以下几点:(1) 当用户上线时,记录上线时间(2) 当用户请求服务时,记录请求服务的时间、服务的类型、本次服务下载的数据量(3) 当用户下线时,记录下线时间。并把本次用户登录、请求服务过程中的所有信息持久化保存(如记录到数据库)    在ESFramework中,实现

2006-03-31 15:58:00 1090

原创 【Spring.net点滴】

    (环境:.Net1.1 ,Spring.net 1.2 Preview)1.集合属性注入    我们的组件经常需要集合类型的属性注入,比如我的Hook(钩子)组件需要注入一个集合,该集合中的元素(int型)指明了要截获哪些类型的消息。我们经常使用IList处理集合问题:        #region HookList 其中元素为整数类型        private ILis

2006-03-29 10:59:00 2518

原创 ESFramework介绍之(17)―― 支持漫游用户和跨区域功能请求

    对于漫游用户的支持和跨区域功能请求的支持是ESFramework最基本的目的之一(回顾),在详细讲述解决方案之前,先了解一下关于这个问题的上下文。    在我们前面讲述的4层C/S架构中,每个AS负责一块区域。比如上海AS负责处理所有目标城市为上海的功能请求和管理所有在上海AS上注册的用户(比如PDA用户或手机用户)。如果一个本是在上海注册的用户出差来到了武汉,最方便的,他会连上

2006-03-27 15:59:00 674

原创 VS小插件--属性自动生成器

    对于“依赖注入”,我最常用的是“设值注入法”(即通过Setter属性注入),对于需要注入很多依赖的类来说,一个一个的手动写属性的繁琐已经让我难以忍受了。于是我写了一个VS2003的小插件,你只需要输入类型和属性名,它就能在编辑器指定的地方自动生成属性,并且一次可生成多个属性。(我试用了VS2005下的属性自动生成功能,感觉也不是那么好用:))    这个小插件安装后,会在VS20

2006-03-24 16:59:00 1176

原创 ESFramework介绍之(16)―― Tcp数据自动发送器ITcpAutoSender

    我们已经积累了这样的经验:如果有一个大块的数据需要通过Tcp发送,我们会采用异步的方式以避免当前工作线程阻塞。那么,如果我们有多个线程需要同时发送大块的数据了?每个线程都在NetworkStream或Socket上提交异步发送数据的请求会导致数据发送的混乱(多个线程同时在一个Socket上进行写操作),所以,我引入了前面介绍的线程安全的网络流。在引入这个类后,似乎日子已经很好过了

2006-03-24 15:59:00 870

原创 ESFramework介绍之(15)-- IRAS

    每个城市都对应着自己的AS,每个AS都有一组FS为之服务,而所有的AS都由一个IRAS联系/管理起来(回顾)。前面我们已经提到,所有的FS都可以是动态添加/移除的,并且FS的地址也是自由可变的。同样,所有AS也都是可以动态添加/移除的,并且AS的地址也是可变的(这里AS与IRAS的机制同上文介绍的FS与AS之间的机制一样)。但是,唯一不能随便变化的是IRAS的地址。这是因为,所有

2006-03-24 09:59:00 568

原创 ESFramework介绍之(14)-- AS与FS通信方案

    前面我们已经多次提到,每个AS都有一组FS为之服务(回顾),AS将接收到的功能请求通过Tcp连接池 或Remoting转发给某个FS处理。下面我们将深入讨论AS和FS之间的通信机制。    首先要解决第一个问题,AS如何知道每个为之服务的FS的地址?    最常见的一种解决方案是,AS处的配置文件中有一个FS地址列表,AS每次启动时,就读取这个列表,然后与列表中的每个FS建立Tc

2006-03-23 09:59:00 813

原创 ESFramework介绍之(13)-- 功能插件处理器工厂

    上文讲述的是AS中的基于连接池的消息处理器,现在我们把焦点转移到功能服务器FS上来,看看FS上消息分派的过程。当FS接收到到一个请求后,会从已加载的功能插件列表中选择一个合适的插件来处理这个消息,而每一个功能插件就相当于一个消息处理器。FS和AS的结构一致:    要注意的是,功能服务器FS上收到的所有消息都应该交给功能插件来处理,不存在其它的处理方式。这是使得FS“纯粹”的必须

2006-03-20 10:59:00 555

原创 ESFramework介绍之(12)―― 基于Tcp连接池的消息处理器

    前面的两篇文章我们已经介绍了Tcp连接池和Tcp连接池管理器,并且引入了ITcpPool接口,这个接口可以将单个连接池和一组连接池统一起来,使它们有相同的外部使用方式。现在我们需要考虑的问题是,当消息分派器分派一个接收到的请求时,如果这个请求需要被FS上的某个功能插件处理,那么消息分派器是如何将这个消息分派到对应的FS上去的?     回顾介绍消息分派器时画出的各消息组件联系图,

2006-03-17 10:59:00 593

原创 ESFramework介绍之(11)-- Tcp连接池管理器

    上文已经讲到,Tcp连接池管理器为我们的应用进行了很多复杂的管理,比如功能服务器的调度(实现FS的负载均衡)、连接池的动态添加/移除、控制每个连接池的相关参数在UI上的显示等,并且连接池管理器与单个连接池拥有一样的接口ITcpPool。我们先回顾一下这个接口:  1     public interface ITcpPool 2     { 3         RentStr

2006-03-16 15:59:00 1014

原创 ESFramework介绍之(10)-- Tcp连接池

    凡是带有“池”的,比如数据库连接池、对象池、缓冲区池(后面可以看到IBuffPool)等等,都是为了避免资源的反复创建/销毁所带来的开销。需要为哪些资源对象建立“池”了?这些资源对象通常符合下面几个特性:(1)在应用中需要反复的被创建/销毁。(2)创建/销毁的开销比较大(3)应用中给定时刻,对该资源对象的数量要求比较大(4)资源对象最好是无状态的(Stateless),这样方

2006-03-16 13:59:00 1227

原创 ESFramework介绍之(9)-- 插件对(Addin Pair)调试“框架”

    使用ESFramework开发C/S(通常为4层、3层也没问题)应用,当需要增加一项新的业务时,我们需要做的仅仅是开发两个插件,一个是服务端的业务功能插件(FunAddin),一个是客户端插件(PassiveAddin),这两个插件合在一起称为Addin Pair。开发这两个插件,只需要关注于业务,而其它与业务无关的比如网络通信、加密、数据安全,都不用管。ESFramework很

2006-03-16 09:59:00 820

原创 ESFramework介绍之(8)-- 客户端插件IPassiveAddin

    前文已经提到了,在IServerAgent的基础上,客户端也可以采用插件的结构形式,客户端插件需要实现IPassiveAddin接口。    我的想法是,当客户端主程序加载一个新的PassiveAddin时,可以在某个菜单的子Items上添加一项,当双击这个子菜单项时,则弹出该客户端插件提供的“业务操作窗体”。这只是使用客户端插件的可行方式之一,你完全可以根据你的应用来决定使用形

2006-03-15 17:59:00 724

原创 ESFramework介绍之(7)-- 服务器代理IServerAgent

    (本文原作于2006.03.15,第一次修正于2006.06.06,修正后适用于ESFramework V0.3+)    (本文是ESFramework对客户端开发的支持特性之一 ,如果要按顺序阅读,请转到ESFramework介绍(序))        分布式系统的构建一般有两种模式,一是基于消息(如Tcp,http等),一是基于方法调用(如RPC、WebServ

2006-03-15 16:59:00 829

原创 ESFramework介绍之(5)――消息分派器IMessageDispatcher

    (本文原作于2006.03.14,第一次修正于2006.06.06,修正后适用于ESFramework V0.3+)    本来Tcp/udp组件是系统与外界交换消息的唯一进出口,而Tcp组件或Udp组件与我们系统唯一的联系是通过消息分派器IMessageDispatcher,如此一来,就相当于ESFramework规定了消息分派器是我们应用与外界交换消息的进出口。IMess

2006-03-14 10:59:00 1571

原创 ESFramework介绍之(4)――消息拦截器INetMessageHook

    网络上传输的消息经常是经过加密和压缩,有的特定类型的消息可能还需要进行其它变形,ESFramework通过INetMessageHook对这些功能提供支持。需要说明的是,ESFramework对消息进行截获(Hook)处理有两种方式,一是仅仅Hook处理消息主体(Body),而不对消息头作任何变换;另一种方式是对整个消息(包括消息头和主体)都进行Hook处理。通常,第一种方式已经

2006-03-13 14:59:00 677

原创 ESFramework介绍之(3)――消息处理器和处理器工厂

   无论是服务端还是客户端,都需要对接收到的消息进行处理,在ESFramework框架中,处理消息的组件称为消息处理器,所有的消息处理器都实现了接口IDataDealer:    1     public interface IDataDealer2     {        3         NetMessage  DealRequestMessage(NetMessage r

2006-03-13 12:59:00 851

原创 ESFramework介绍之(2)――网络通信消息NetMessage

    较之C++而言,.NET是一个更加“动态”的平台,其动态能力建立在反射机制之上,而反射的基础是“元数据”。    上文已经提到过,如果一个框架要为我们的应用做更多的事情,那么这个框架必须建立更多的标准,必须对框架自己要处理的消息有更多的了解,所以,每个消息都要是自描述的,也就是说每个消息要包含它自己的“元数据”。那么,“元数据”位于消息的何处了?你一定想到了,对,是消息头(Mes

2006-03-13 09:59:00 1405

原创 ESFramework介绍之(1)――网络通信消息协议接口IContract

   通过网络相互通信的系统之间(如客户端与服务端的通信)要想正常交互,它们必须有“共同的语言”,这种语言就是消息协议。遵守消息协议的消息才能被我们的系统所理解。    我们知道,消息在网路上传输的是字节流,而我们主流的面向对象系统中处理的却是“对象”,如何将从网络上接收到的字节流转化为“对象”,又如何将“对象”转化为字节流以便通过网络传递给其他系统,这便是IContract接口定义的内

2006-03-12 19:59:00 715

原创 ZipHelper 修正

    在我前面的“压缩与解压缩 ZipHelper ”一文中提到了使用ICSharpCode.SharpZipLib.dll库的BZip2OutputStream和BZip2InputStream 来进行数据流的压缩。这几天在我的AgileIM的测试中发现使用BZip2OutputStream和BZip2InputStream 来进行压缩/解压缩并不可靠,有时会出现这样的情况:对A进行

2006-03-09 11:59:00 1106 1

原创 AgileIM 源码公开

    前文已经提到AgileIM只是用于我的通信框架ESFramework测试的客户端,AgileIM 如今已经支持的主要功能:(1)文字聊天(2)文件传输(3)视频/音频聊天(4)基于Udp的NAT/NAPT 穿透    IM类型的软件所需要的框架的能力大致也在这里了,现在把AgileIM的源码开放,希望能对后来者有些许帮助,当然,服务端通信框架的源码时不开放的。即使如此,你也可以从

2006-03-06 10:59:00 1300

原创 压缩与解压缩 ZipHelper

    我在AgileIM的开发中解决视频/音频会话功能时,发现传输的音/视频数据量太大,通过一些格式转换(如BMP->JPG、或 帧间预测编码)可以适当减少带宽的需求,但是仍然不能满足需求,于是我想到了数据压缩,经过我测试、普通的音/视频数据经压缩后可以只有原来的一半大小,基本可以满足需要了。压缩/解压功能我借助了ICSharpCode.SharpZipLib 类库,为了更方便易用,我

2006-03-06 09:59:00 865

原创 AgileIM 即时通

    AgileIM 是一款类似QQ、MSN的聊天软件,这个软件却是我“无意插柳”的结果,AgileIM 的“前身”原本只是为了测试我的通信框架ESFramework的通信能力,没想到,做了两个星期后则个用于测试的小软件居然有点模样了,AgileIM 如今已经支持的主要功能:(1)文字聊天(2)文件传输(3)视频/音频聊天(4)基于Udp的NAT/NAPT 穿透    先贴两张图吧,后

2006-03-02 21:00:00 1277

OVCS视频会议源码(Windows、Linux、Android、iOS、Web、银河麒麟、统信UOS)

OVCS是一套支持全平台的视频会议系统,并且适配了信创国产化的OS和CPU。OVCS源码压缩包中包括的源码有:服务端 + WinPC端 + LinuxPC端(国产OS) + Android端 + iOS端 + Web端。服务端和PC端使用VS + C#,安卓端和iOS端为原生,Web端为JS。 OVCS 视频会议主界面布局: (1)当只有一个人开启视频时,采用大视窗显示。 (2)当2~4人开启视频时,使用2x2布局。 (3)当超过4人开启视频时,使用3x3布局。

2023-06-20

即时通讯系统GGTalk 8.0 源码(Windows、Linux、Android、iOS)

GGTalk 8.0 源码,这次版本变更的主要内容如下: 增加Linux客户端,支持国产操作系统(如UOS、银河麒麟等)、国产CPU(如龙芯、鲲鹏等)。支持同一账号在多个设备上同时登录。支持高清视频聊天(1920*1080分辨率)。QQ:2027224508

2022-10-14

C#网络电子白板(支持pdf,word,ppt课件) 源码

下载源码,运行系统进行测试时,请注意: (1)启动服务端。 (2)启动第一个客户端,选择“老师”角色,登录进默认教室。 (3)再启动多个客户端,选择“学生”角色,登录进默认教室。 (4)老师即可进行上传课件、打开课件、删除课件、课件翻页,在课件上标注、书写,等等操作。

2015-09-10

企业即时通信系统 - OrayTalk 2.1

可在广域网直接部署运行(压缩包内含服务端、客户端、数据库脚本),功能及UI风格高仿QQ,主要功能有: (01)企业组织结构。 (02)文字聊天:字体设置、动态表情、振动提醒、截图、手写板。 (03)语音、视频聊天。 (04)文件/文件夹传送(支持断点续传)。 (05)离线文件、离线消息。 (06)远程协助。 (07)桌面共享(可指定共享区域)。 (08)好友:查找好友、添加好友、删除好友。 (09)群组:创建群、加入群、退出群、群讨论。 (10)消息记录:既在本地存储(查看时可瞬时加载),也存储于服务器数据库中(记录永不丢失,在任何地方都可查看)。 (11)最近联系人。 (12)个人资料:注册、修改、自拍头像/上传头像。 (13)在线状态:隐身、在线、离开、忙碌、请勿打扰。 (14)消息提醒(托盘图标闪动、头像闪动),对方“正在输入”提示。 (15)系统设置:开机自动启动、麦克风设备索引、摄像头设备索引,叉掉主窗口时关闭程序还是隐藏窗口。 (16)好友、群组资料本地缓存,加快启动速度。 (17)断线自动重连。

2014-09-24

ESFramework通讯框架

该通讯框架,底层使用IOCP模型,支持局域网和广域网的P2P通信,支持文件传送,支持跨平台通信,支持服务器群集 可以嵌入其它软件,二次开发,文档齐全,接口清晰规范,容易上手。

2012-05-24

IM聊天系统源码(C#),支持桌面客户端和Silverlight客户端

实现了网络聊天IM的基本功能,基于.NET 2.0 开发,使用了ESFramework通信框架。支持windows客户端和Silverlight客户端。很强大!

2011-04-08

NATUPnP - 解决TCP穿透NAT

使用upnp协议解决NAT TCP穿透问题。

2010-01-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除