现场直播:http://www.csdn.net/subject/apusic/

解决方案 »

  1.   

    卖多少钱一套?比JBOSS如何?
      

  2.   

    2005年5月19日我知道了金蝶应用服务器Apusic V4.0,金蝶打着“国产软件的骄傲、国际品质”等旗号似乎让国人为之一震,可是真的如此吗?是国产软件的骄傲还是国产软件的“耻辱”呢?我在第一时间下载了此服务器,所谓外行看热闹,内行看门道,于是我花了20分中稍为测了测其内置的web服务器和jsp,呵呵。首先看看此应用服务器的http部分,一个很简单的测试就发现了问题。
    我用java构造了一个请求,内容如下
    Socket s = new Socket();
    s.connect(new InetSocketAddress("127.0.0.1",6888), 80000);
    PrintStream out = new PrintStream(s.getOutputStream());
    out.print("\r\n"); //问题出在这里呢
    out.print("GET / HTTP/1.1\r\n");
    out.print("Accept-Language: zh-cn\r\n");
    out.print("User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)\r\n");
    out.print("Host: www.apusic.com\r\n");
    out.print("\r\n");
    out.flush();BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
    String line = in.readLine();
    while (line != null) {
      System.out.println(line);
      line = in.readLine();
    }服务器端直接关闭了此次连接。问题出在哪里呢,看看程序里的注释,就知道了,因为请求部分第一行是一个空行,第二行才是请求命令,于是我们的Apusic V4.0就报错了,呵呵,你可以去试试看其他web服务器(IIS, Tomcat, Apache等等)你会发现这些服务器没有报错,为什么,因为http 1.1规范中必须支持此情况,因为持久连接的需要,然而我们的Apusic V4.0不支持。
    断点续传(分范围请求)怎么样呢?
    我用java构造了一个请求,内容如下
    Socket s = new Socket();
    s.connect(new InetSocketAddress("127.0.0.1",6888), 80000);
    PrintStream out = new PrintStream(s.getOutputStream());
    out.print("GET / HTTP/1.1\r\n");
    out.print("Accept-Language: zh-cn\r\n");
    out.print("User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)\r\n");
    out.print("Range: bytes=-2;2-10\r\n"); //或者out.print("Range: bytes=-2,2-10\r\n"); 都不支持
    out.print("Host: www.apusic.com\r\n");
    out.print("\r\n");
    out.flush();BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
    String line = in.readLine();
    while (line != null) {
      System.out.println(line);
      line = in.readLine();
    }
    让我很吃惊Apusic V4.0 web服务器竟然不支持多部分范围请求。http 1.1的协议都支持不好,很难想象他的其他规范支持的如何。好让我来新建一个jsp来测试
    jsp就一行,而且结尾少了一个分号
    <%int i = 0%>此jsp运行应该报错,可是如果你用IE 6.0去访问这个jsp文件,你会发现IE只会显示自己的500错误信息,而Apusic V4.0返回的错误信息却看不到。但出错信息在控制台会打出。问题出在哪里呢?呵呵其实问题是在IE不兼容,但是我想你也应该照顾一下IE吧,毕竟用IE的人多,如果你的出错信息比较多则IE可以显示Apusic V4.0返回的错误信息。
    先在把jsp改成下面的内容
    <%int i = 0;%>
    <%
    呵呵编译顺利通过,你甚至还可以写这样的一句<% <% %>,编译照样通过,我不太确定这是否符合jsp规范吗?
    Apusic V4.0似乎对于jsp文件的出错行处理的很好,那么我们看以下这个jsptest begin
    <%=get()%><%!private int i = 0;
    private int get() {
      return i++;
    %>   <--出错行在这里
    };%>
    test endApusic V4.0会告诉你jsp文件的出错行在第一行,事实是出错行在(见上面的标识)
    Apusic V4.0用了个很愚蠢的办法去寻找jsp文件的出错行导致像这样的错误无法正确显示jsp出错行,你可以看jsp编译后的java文件。中国人的软件,对中文支持如何呢?对中文目录和文件名都不支持。Tomcat不支持人家是外国的,可你Apusic V4.0是国产的。
    搞笑的安装
    如果你Apusic V4.0的安装目录中含有空格或中文,那么对不起,你的jsp就无法顺利编译了,最简单在windows下你可以把Apusic V4.0装到系统盘Program Files目录下去,因为此目录名中含有空格,在看看你的jsp还能不能编译通过。
    最后我看了看Apusic V4.0 web服务器是否支持可以防止过量http头信息,很遗憾不支持,看看下面这个用java写的请求
    Socket s = new Socket();
    s.connect(new InetSocketAddress("127.0.0.1",6888), 80000);
    PrintStream out = new PrintStream(s.getOutputStream());
    out.print("GET / HTTP/1.1\r\n");
    while(true) {
      out.print("crack you !!")
    }此程序将不断的向Apusic V4.0 web服务器发送"crack you !!",而Apusic V4.0 web服务器却不会单方面中断这个非法请求,于是这些发过去的"crack you !!"将会存在Apusic V4.0 web服务器的内存中(并且大量消耗cpu),你可以自己试一下,服务器的内存不断在增加,只要你耐性或有够多的机器,不用多久就可以叫Apusic V4.0 web服务器宕掉。
    你可以去测以下其他知名web服务器,都没有这个问题。
    好了,我只是简单看了一下,其他还有很多问题我都不想写了,我不知道为什么这麽简单的一些功能都会有错,国外免费的都比你做得好,这种问题拿出去被国外同行看倒不是被人家笑死。
      

  3.   

    2005年5月19日我知道了金蝶应用服务器Apusic V4.0,金蝶打着“国产软件的骄傲、国际品质”等旗号似乎让国人为之一震,可是真的如此吗?是国产软件的骄傲还是国产软件的“耻辱”呢?我在第一时间下载了此服务器,所谓外行看热闹,内行看门道,于是我花了20分中稍为测了测其内置的web服务器和jsp,呵呵。首先看看此应用服务器的http部分,一个很简单的测试就发现了问题。
    我用java构造了一个请求,内容如下
    Socket s = new Socket();
    s.connect(new InetSocketAddress("127.0.0.1",6888), 80000);
    PrintStream out = new PrintStream(s.getOutputStream());
    out.print("\r\n"); //问题出在这里呢
    out.print("GET / HTTP/1.1\r\n");
    out.print("Accept-Language: zh-cn\r\n");
    out.print("User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)\r\n");
    out.print("Host: www.apusic.com\r\n");
    out.print("\r\n");
    out.flush();BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
    String line = in.readLine();
    while (line != null) {
      System.out.println(line);
      line = in.readLine();
    }服务器端直接关闭了此次连接。问题出在哪里呢,看看程序里的注释,就知道了,因为请求部分第一行是一个空行,第二行才是请求命令,于是我们的Apusic V4.0就报错了,呵呵,你可以去试试看其他web服务器(IIS, Tomcat, Apache等等)你会发现这些服务器没有报错,为什么,因为http 1.1规范中必须支持此情况,因为持久连接的需要,然而我们的Apusic V4.0不支持。
    断点续传(分范围请求)怎么样呢?
    我用java构造了一个请求,内容如下
    Socket s = new Socket();
    s.connect(new InetSocketAddress("127.0.0.1",6888), 80000);
    PrintStream out = new PrintStream(s.getOutputStream());
    out.print("GET / HTTP/1.1\r\n");
    out.print("Accept-Language: zh-cn\r\n");
    out.print("User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)\r\n");
    out.print("Range: bytes=-2;2-10\r\n"); //或者out.print("Range: bytes=-2,2-10\r\n"); 都不支持
    out.print("Host: www.apusic.com\r\n");
    out.print("\r\n");
    out.flush();BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
    String line = in.readLine();
    while (line != null) {
      System.out.println(line);
      line = in.readLine();
    }
    让我很吃惊Apusic V4.0 web服务器竟然不支持多部分范围请求。http 1.1的协议都支持不好,很难想象他的其他规范支持的如何。好让我来新建一个jsp来测试
    jsp就一行,而且结尾少了一个分号
    <%int i = 0%>此jsp运行应该报错,可是如果你用IE 6.0去访问这个jsp文件,你会发现IE只会显示自己的500错误信息,而Apusic V4.0返回的错误信息却看不到。但出错信息在控制台会打出。问题出在哪里呢?呵呵其实问题是在IE不兼容,但是我想你也应该照顾一下IE吧,毕竟用IE的人多,如果你的出错信息比较多则IE可以显示Apusic V4.0返回的错误信息。
    先在把jsp改成下面的内容
    <%int i = 0;%>
    <%
    呵呵编译顺利通过,你甚至还可以写这样的一句<% <% %>,编译照样通过,我不太确定这是否符合jsp规范吗?
    Apusic V4.0似乎对于jsp文件的出错行处理的很好,那么我们看以下这个jsptest begin
    <%=get()%><%!private int i = 0;
    private int get() {
      return i++;
    %>   <--出错行在这里
    };%>
    test endApusic V4.0会告诉你jsp文件的出错行在第一行,事实是出错行在(见上面的标识)
    Apusic V4.0用了个很愚蠢的办法去寻找jsp文件的出错行导致像这样的错误无法正确显示jsp出错行,你可以看jsp编译后的java文件。中国人的软件,对中文支持如何呢?对中文目录和文件名都不支持。Tomcat不支持人家是外国的,可你Apusic V4.0是国产的。
    搞笑的安装
    如果你Apusic V4.0的安装目录中含有空格或中文,那么对不起,你的jsp就无法顺利编译了,最简单在windows下你可以把Apusic V4.0装到系统盘Program Files目录下去,因为此目录名中含有空格,在看看你的jsp还能不能编译通过。
    最后我看了看Apusic V4.0 web服务器是否支持可以防止过量http头信息,很遗憾不支持,看看下面这个用java写的请求
    Socket s = new Socket();
    s.connect(new InetSocketAddress("127.0.0.1",6888), 80000);
    PrintStream out = new PrintStream(s.getOutputStream());
    out.print("GET / HTTP/1.1\r\n");
    while(true) {
      out.print("crack you !!")
    }此程序将不断的向Apusic V4.0 web服务器发送"crack you !!",而Apusic V4.0 web服务器却不会单方面中断这个非法请求,于是这些发过去的"crack you !!"将会存在Apusic V4.0 web服务器的内存中(并且大量消耗cpu),你可以自己试一下,服务器的内存不断在增加,只要你耐性或有够多的机器,不用多久就可以叫Apusic V4.0 web服务器宕掉。
    你可以去测以下其他知名web服务器,都没有这个问题。
    好了,我只是简单看了一下,其他还有很多问题我都不想写了,我不知道为什么这麽简单的一些功能都会有错,国外免费的都比你做得好,这种问题拿出去被国外同行看倒不是被人家笑死。
      

  4.   

    作人要厚道啊!!!!!!!!!!http://www.apusic.com/support/article.jsp?articleId=146不能访问.金蝶也算是国内软件的大公司了,拿很粗的东西出来大肆宣传和他的身份很不配啊。少一些浮华,让我们努力奋进!
      

  5.   

    楼上1楼的这个连接错只是一个普通的应用没处理nullpoint而已
    楼上2楼的多看看http rfc
      

  6.   

    感谢kangaroo_egg(袋鼠蛋)能如此认真地对Apusic 4.0有这样深入的测试,虽然有点鸡蛋里面挑骨头,但仍表示感谢,毕竟这样可以使Apusic更加完善。下面我对你所提出的问题做一些解答:1. 关于HTTP头部多余空行的问题
    我再次仔细查阅了RFC 2068,第5.1节The Request-Line begins with a method token, followed by the
    Request-URI and the protocol version, and ending with CRLF. The
    elements are separated by SP characters. No CR or LF are allowed
    except in the final CRLF sequence.    Request-Line   = Method SP Request-URI SP HTTP-Version CRLF因此Apusic这样做并没有错,而且没有任何浏览器会发送这样的请求。Apusic是支持持久连接的,当你在发送第一个请求并要求keep-alive之后,后续请求之间可以包含任意多的空行,这点可以很容易写程序验证。Apusic在接收到CRLF之后立即关闭请求还有另外一个原因。Apusic是支持多路复用的,即在同一个端口下允许使用多种协议,并不仅限于HTTP。例如目前Apusic在缺省的6888端口下就支持HTTP, IIOP, JMS等多种协议,而且是可扩充的。实现多路复用的基本原理就是检测输入流的头几个字节,进而判断出协议类型。由于没有任何协议是以CRLF打头的,因此Apusic抛弃了这一连接请求。2. 断点续传(分范围请求)的问题。由于Apusic首先是一个J2EE应用服务器,其Web Server更多地是一个Servlet和JSP容器,文件传输并不是它的强项,但这并不表示Apusic不支持断点续传,这点用falshget就可以很容易验证,而不需要写什么程序。3. 对于JSP语法错误IE只会显示自己的500错误信息的问题,我们是按照标准HTTP协议来实现的,所以并没有针对IE做任何处理。如果你想在IE中看到错误信息其实也很简单,只需在IE中打开
       工具->Internet选项->高级->浏览->显示友好HTTP错误信息
    将上面的勾去掉就行了。IE只认为它的错误信息是"友好"的,别人的都是"不友好"的,它这么霸道,我们也没办法。4. 对于以下的JSP代码
    <%int i = 0;%>
    <%在我这里是会报错的,烦请你再确认一下。5. 关于JSP文件错误行定位的问题,我们是尽可能地将Java编译出错位置与JSP源文件对应起来,在大多数情况下这种对应关系都很准确,甚至在运行过程中抛出的异常都能将出错位置指向JSP源文件,这在其他应用服务器中是见不到的。但有时这种对应关系并不能100%准确,针对你提出的特例我们将尽快予以改进。6. 中文文件名的和文件名中包含空格的问题,我们正在处理。7. 服务器是否支持可以防止过量http头信息的问题,非常感谢你为我们发现了一个较为严重的bug,我们会尽快发布安全补丁。
    世界上没有任何一个软件是十全十美的,发现并解决问题不仅不会对软件造成伤害,反而会使软件向更好的方向发展。我相信国外同行们看到我们这些问题肯定不会耻笑我们,相反会善意地指出我们的问题,帮助我们改进。一个心态良好的程序员绝不会回避程序中存在的错误和缺陷,相反,每发现一个程序中的错误都会感到很兴奋,因为这个程序的稳定性又将要提高了。
      

  7.   

    我个人认为,金蝶中间件公司是一个做的多说的少的公司。
    金蝶Apusic应用服务器意味着什么?Microsoft至今还没有一个像样的应用服务器。事实上,它至今还没有真正进入企业级开发领域。
    至于那个事是不是BUG,不是问题。被许多人奉为神明的Windows,还一天到晚打补丁呢。
    中国人,别浮燥,也别迷信,一步一步地做,才有可能赶超先进水平。
      

  8.   

    既然是中国人就应该支持中国自己的软件,虽然我们自己的软件仍然存在这样或是那样的不足,但是,
    我相信这只是一个过程,也是一个必须经历的过程,没有任何一个软件是十全十美的,当我们经历的多了,结果自然会好的。要相信自己。呵呵。
    学习ing!!!
      

  9.   

    这样的帖子应该顶,置顶,再置顶。!
    虽然我不是搞web的,
    但看到 回复人: kangaroo_egg(袋鼠蛋) ( ) 信誉:100  2005-05-19 17:39:00  得分: 0  这个牛人的测试,表示非常的佩服像这样的bug中国人的软件,对中文支持如何呢?对中文目录和文件名都不支持。
    空格,等我觉得太不应该了e,因为这样de小bug十分容易测试出来.,真的怀疑是否经过严密的测试
      

  10.   

    我知道 袁红刚是j2EE高手,但我不知道Apusic V4.0是国际品质.....
      

  11.   

    对 kangaroo_egg(袋鼠蛋) 的这句话“好了,我只是简单看了一下,其他还有很多问题我都不想写了,我不知道为什么这麽简单的一些功能都会有错,国外免费的都比你做得好,这种问题拿出去被国外同行看倒不是被人家笑死。”
    我不敢恭维!
    话说的也未免太偏激了,事实是这样的。怎么说也是我国自产的!
    感觉做事总不能吃里爬外吧!
    应该以一种理解的角度去看问题,说句不太好听的,你这样讲,也就是你可以做的比Apusic更好的了,那你就自己做自己用好了!这样并不是说这就是国人我也一样的爱面子,讲话前应三思客观的看待!
      

  12.   

    我不知道国内还有哪家公司在做“server级”的软件。
    金碟能推出Apusic的确让人振奋。国外这样级别的软件也是要过多个版本才能稳定下来的。
      

  13.   

    我很想知道,为什么要起名为Apusic呢?查了google半天,也没查到。
    而且怎么发音?
    真希望有一个中国名字!
      

  14.   

    Apusic有没有偷JBOSS的源代码啊??