DYCOM用于开发网络应用程序的通信部分功能的快速开发,并且支持跨平台通信技术。所支持的客户端可以从DYCOM官方网站:http://dy2com.com 了解更多。。。
使用前的准备工作:
我们先了理一下DYCOM的使用方法,首先DYCOM是通过dll的方式提供了二次开发的编程接口,我们首先可以到DYCOM官网下载相应用dll组件使用。
DYCOM的设计思想是基于 服务端<--->客户端 应用开发的产品。也就是必须有一个服务器里边并运行着一个由DYCOM开发的服务端应用程序,而且这个程序可以让分布的国际互联网上的任何一台电脑访问。另一方面,我们还要开发一个客户端应用程序。这个客户端应用程序同样通过DYCOM提供的客户端组件开发出来的。那么这样的一种网络通信型的应用方案即是:服务端<--->客户端 通信模式了。
进入DYCOM的官方网站,我们可以在网站主菜单的"DYCOM下载",看到所有的DYCOM服务端和客户端组件的下载地址,并且在网页中右边提供了分类索引,我们可以通过分类快速找到我们要下载的各个技术平台的DYCOM组件:
a)项目模板可以帮助你快速创建一个DYCOM基础服务. 它们可以在上图中右边的“栏目列表”里的“服务端模板”里下载到相关的项目模板文件。下载回去的项目模板只要放到你的visual studio的项目模板目录下(例:C:\Users\jac\Documents\Visual Studio 2010\Templates\ProjectTemplates),然后重启visual studio后在新建项目里,我们可以看到DYCOM的相当项目建立项。如下图:
这样我们就可以像新建一个普通项目那样新建一个DYCOM基础服务的工程了。新建后的项目已经包括一个服务原形,并有代码注释说明:
直接在visual studio运行这个项目即是一个基础的服务器端程序。它提供了一个基础功能,就是接收到一个字符串后马上广播到所有已连接的客户端.可见。要建立一个基础的服务端程序我们一句代码也不用写,只要鼠标点点即可建立。
b)关于DYCOM的网络通信协议。DYCOM为了让服务可以适用于IM,游戏,视频,音乐等应用场境的开发,核心方法里所传送的全部是二进制流数据,对于易用性方面DYCOM还提供了协议编写器和读取器。除了支持基础的string,int32,double,datetime,boolean等等系统常用类型的支持。还增了json数据的编码和解码器。让我们有无比自由的通信协议自定制能力。也为开发一些游戏外挂或私有服务器类应用提供了快速的可行方案。
c)DYCOM协议编写器(DYWriter)和读取器(DYReader)。无可口非我们开发的网络游戏和通信应用都必须要一个高速且占用网络资源少的协议去提高应用的用户体验,其中最直接的思路肯定就是用二进制流数据进行网络传输方案。而DYCOM的协议编写器和读取器正是为了这一个功能而产生的。它们可以帮你把你的常用变量变成二进制流,而在网络另一端的接收后帮你还原成为你原有的常用变量类型。而且每个变量的顺序也可以任由我们自己随意定义。它们只要遵守一个规则,那就是读取器读取协议的变量时必定按协议编写器编写协议的先后顺序一样。为了更能说明问题,这里我举两个例子。大家可以通过这两个简单的代码更容易理解DYCOM的协议编写器和读取器。
例子1:编码和还原一个字符串
var msg = DYWriter.GetDYBytes(“hello DYCOM”,Encoding.UTF8);
上边这句代码目的通过DYCOM协议编写器把一个字符串按UTF8编码格式编码成二进制流,并付值到msg变量中。我们只需要调用DYCOM.send方法把msg发送即可。那么我们就可以通过以下的DYCOM协议读取器来还原“hello DYCOM”这个字符串:
//实例化DYCOM消息解码器
DYReader read = new DYReader(“接收到的二进制流");
//变量
string message;
//读出一个字符串值到message变量,使用UTF8解码
if (read.ReadString(out message, Encoding.UTF8))
{
//处理读取到的message变量
}
上例中我们可以看出使用DYCOM发送一个字符串就是这么简单了。那么问题又来了,如果我们需要同一消息中同时发送多个不同类型的量变值,那我们要怎样办呢?
例子2: 编码和还原一条两个变量参数的消息,第一个要发送的是一个int值为1,第二个要发送的是一个字符串"hello DYCOM”
DYWriter.Merge(DYWriter.GetDYBytes(1), DYWriter.GetDYBytes(“hello DYCOM”, Encoding.UTF8)));
上边个句代码我们可以看到使用了Merge函数,它是用于合并多个由DYCOM编写器产生的流。在其参数中我们可以用豆号隔开各个编写器编写操作。这里请注意一点,我们在读取这个流的时候,读出的顺序必须和编写时的顺序一样,也就是说我们第一个读的必须是一个int值,第二个是字符串值。
//实例化DYCOM消息解码器
DYReader read = new DYReader(“接收到的二进制流");
//变量
int intValue;
string stringValue;
//读出一个字符串值到message变量,使用UTF8解码
if (read.ReadInt32(out intValue) && read.ReadString(out stringValue, Encoding.UTF8))
{
//处理读取到的intValue和stringValue变量
}
读取还原的时候要注册两个地方,一是读出顺序必须和编写时的顺序一样,二是出的时候我们可以在if语句里用&&来一资读出整条消息的所有变量。这样操作代码更优雅.
通过上边的两个例子。相信大家已经知道DYCOM的协议编写器和读取器的用法了。如有更多问题请到DYCOM官方识论坛:http://bbs.dy2com.com 进行更多讨论。
d)关于DYCOM中的JSON序化化器的使用方法。首先我们先清楚认识一下JSON本身就是一个让强类型与字符串间可以自由互转的技术。首先可以确定的是JSON的字符串我们可以通过刚刚例子1的方式去传送一个JSON序列化后的字符串。接着我会举一个例子说明DYCOM中的JSON序列化器的使用方法:
例子3:利用DYCOM的JSON序列化器序列化和反序列化一个类。
1.我们先定义一个类:
public class info
{
public int intData { get; set; }
public string stringData { get; set; }
}
2.实例化一个JSON序列化器,并命名为mapper:
JsonMapper mapper = new JsonMapper();
3.把一个info类序列化为一个JSON字符串到一个jsonSTring的变量:
info infoInstance = new info();
infoInstance.intData = 1;
infoInstance.stringData = "hello DYCOM";
string jsonString = mapper.ToJson(infoInstance);
以上代码主要是使用mapper.ToJson函数把info实例类infoInstance序列化为一个json字符串并付值到jsonString中。由于现在jsonString是一个字符串,我们完全通过上边的例子1或者例子2来对这个jsonString进行网络传送。
4.最后我们网络边一端到这个jsonString后,我们如何把这个字符串反序列化为infoInstance呢?代码如下:
info infoInstance = mapper.ToObject<info>(jsonString);
就是这么简单,我们完成了关于DYCOM中使用JSON的相关操作了。而这一切都只在DYCOM的组件内,无需再引用其他组件!
下一章我会为大家介绍DYCOM的服务端和客户端的祥细使用方法和相关函数的说明。
更多DYCOM案例:
开源项目:基于DYCOM的多人在线网络游戏(silverlight客户端)地址: http://flyer.codeplex.com
Silverlight实时摄头头共享项目:http://funsl.com/content/silverlight4-%E4%B8%80%E5%AF%B9%E5%A4%9A%E8%A7%86%E9%A2%91%E5%AE%9E%E6%97%B6%E5%85%B1%E4%BA%AB
更新案例请进入DYCOM官网:http://www.dy2com.com/a/DYcomanli/