互联网解决方案咨询

梦想有多大路就会有多远:作一颗IT量子
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

网站优化-XML+HTTP实现

Posted on 2009-10-31 13:32  互联网粒子  阅读(784)  评论(0编辑  收藏  举报

上一篇文章中我介绍了分布式系统方面的基础知识.这里我们来看看分布式实现的另一种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