zoukankan      html  css  js  c++  java
  • 网站优化XML+HTTP实现

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

  • 相关阅读:
    WCF 第四章 绑定 在多个绑定上暴露一个服务契约
    WCF 第五章 行为 事务跨操作事务流
    WCF 第五章 导出并发布元数据(服务行为)
    WCF 第五章 行为 通过配置文件暴露一个服务行为
    WCF 第五章 不支持会话的绑定的默认并发和实例
    WCF 第五章 并发和实例(服务行为)
    WCF 第五章 行为 总结
    WCF 第四章 绑定 绑定元素
    WCF 第五章 行为 事务之选择一个事务协议OleTx 或者WSAT
    WCF 第四章 绑定 比较各种绑定的性能和可扩展性
  • 原文地址:https://www.cnblogs.com/Leung/p/1593486.html
Copyright © 2011-2022 走看看