在上一篇文章中我介绍了分布式系统方面的基础知识.这里我们来看看分布式实现的另一种HTTP的实现
用XML做为数据交换协议,然后走HTTP实现转输,老姚说它的性能会比WEB SERVICE性能高些.我下次会把这个测试做出来比输下看看有什么区别.
先看看实现吧.先介绍下大至现实过程.客户机请求服务器的一个URL建立HTTP连接,然后直接向服务器POST一个数据流,这个数据流可以用XML,JSON,二进制等.
当服务器接受到POST过来的流后,进行分析,其实就是想要知道客户机需要服务大帮他完成什么,分析完后完成业务功能,直接把处理的结果返回给了客户机.这就过程就算一次调用完成.
做一个简单的验证
1、需要定义XML数据作为通讯双方的协议.就是客户端需要POST到服务器的流
<?xml version="1.0" encoding="utf-8"?>
<xmlhttp>
<userid>744</userid>
<action>getPayList</action>
</xmlhttp>
假设上面的协议是客户端需要向服务器POST的请求.userid表示当前用户的ID,getPayList表不需要服务器返回一个支付列表给客户端.
为了减化功能,我们直接把上面段内容存成test.xml文件
客户端POST的代码如下
private string XML_Http_Stream()
{
//获取到POST过去的数据流
string data = GetTextFromXMLFile(Server.MapPath("test.xml"));
byte[] bytes = Encoding.UTF8.GetBytes(data);
//与服务器建立HTTP接接
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://xml.test.com/get.aspx");
request.Method = "POST";
//request.Proxy = null; 如果有服务代理需要加上服务器代码
request.ContentType = "text/xml";
request.ContentLength = bytes.Length;
Stream requestStream = request.GetRequestStream();
//通过HTTP接连直接向服务器写入一个流
requestStream.Write(bytes, 0, bytes.Length);
requestStream.Close();
//等待服务器处理,返回数据
WebResponse response = request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("gb2312"));
string str = reader.ReadToEnd();
reader.Close();
response.Close();
responseStream.Close();
Response.Write(str);
return str;
}
服务器get.aspx端接受的代码,很简单吧,直接获取到流,然后需要分析的可以另外自己写代码分析POST过来的流然后处理业务逻辑后返回.
Page.Response.ContentType = "text/xml";
StreamReader reader = new StreamReader(Page.Request.InputStream);
if (reader != null)
{
String xmlData = reader.ReadToEnd();
if (xmlData != null && xmlData.Length>0)
{
Response.Write("I got your post");
reader.Close();
reader.Dispose();
}
}
else
{
Response.Write("No date post to me");
}
如果换成json+http呢,其实也是一样,变化的只是通讯数据协议,不是XML格式而是JSON,交换数据的双方完成是据根实际的应用来定.
性能测试比较
http://www.cnblogs.com/Leung/archive/2009/11/06/1597734.html