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 

  • 相关阅读:
    文件权限
    文件权限
    Nginx SSL/HTTPS 配置
    Nginx SSL/HTTPS 配置
    Nginx SSL/HTTPS 配置
    安装opencv3.3.0方法
    安装opencv3.3.0方法
    安装opencv3.3.0方法
    安装opencv3.3.0方法
    阿里巴巴的体量到底有多大?
  • 原文地址:https://www.cnblogs.com/Leung/p/1593486.html
Copyright © 2011-2022 走看看