`
yangyi
  • 浏览: 114549 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

windows下对chunked模式web services做服务集群的一些问题

    博客分类:
  • Web
阅读更多
公司的产品各个分布式组件之间使用基于xfire的web service进行行为触发和信息传递。
之前一直通过网络层虚拟IP工具进行集群,因本人最近要搭建一套开发的测试环境,但硬件集群昂贵,所以想通过Web server反向代理来实现局域网内地址和端口的转发。

备选有两个:nginx和apache,下面做一些探索和分析,希望对大家有帮助

nginx这个反向代理的工具不错,但是就是不支持chunked post
查了一下,可以通过一些第三方的module解决,原理是把chunked request,拦截并聚合成单一的request,再进行转发。
但是问题是这样处理后header保留的Transfer-Encoding header会导致服务端解析错误(服务端又当成chunked处理了)
于是就需要另一个module,拦截并去掉header里的Transfer-Encoding标记

下一个问题是官方只支持核心的module,并且对于windows只提供build,不提供build环境
没办法,用cygwin,需要用到的库有pcre,perl的正则库,然后把上面说的两个module:
HttpChunkinModule和HttpHeadersMoreModule的src下载下来,configure的时候加上

configure参数如下:
$ ./configure --prefix=. --sbin-path=nginx --add-module=./chunk/ --add-module=.
/header-cut/ --with-cc-opt="-D FD_SETSIZE=2048" --with-pcre=./pcre/
然后make make install,最后把程序运行的依赖的dll从cygwin拷贝出来就可以了

这样子试过之后,发现还是不能解决问题,通过wireshark抓包发现原因是chunked请求被合并了,但是头采用的是mtom xop协议,服务端会默认采用chunked来解析,这时又丢失了boundary。
不知道通过修改header能不能解决这个问题,原理是把xop协议相关的头修改成普通的soap协议头

没办法,只能选择apache了,apache2.2默认即支持chunked的反向代理,只需enable相关模块,并配置proxypass即可,这个不需要什么改动,就不赘言了。

结论,对于use了mtom和chunked-enabled的web services请求进行load-balance时,暂时nginx还没有很好的支持,建议直接采用apache2。
否则,就把这两个特性关了吧。

P.S
为什么非要用Windows,因为公司设备监护人员暂时不能管理linux设备,一是操作要求高,二是安全方案的一致性
分享到:
评论
1 楼 yangyi 2011-04-07  
其实我还在想一个问题,就是chunked + xop 模式的优缺点在哪里,如果所有web service都默认采用chunked模式请求,固然默认提供了对binary的传递支持,但是等于又封装了一层编码和解码的工作量,这样对于大量的短的文本请求,效率上是不利的,但是目前我没有数据做支撑,回头做一些压力测试,看一看。
-----------------
update:
3000次hello world调用,非chunked模式可以省一半的时间。
另测试环境在本机,不经过网卡,在真实环境下,I/O应该是更大的负担

相关推荐

    windows下C++实现的HTTP web 服务器

    测试方式(依次在浏览器输入一下...4、支持chunked数据的解析 缺点: 1、支持的方法不够全面 2、CGI实现不够科学,可以尝试使用FASTCGI 3、不支持https 4、不支持回应chunked数据 感兴趣的同学可以继续完善相关功能.

    HTTP协议的chunked编码

    HTTP协议是互联网上应用最为广泛的一种网络协议,用于在Web浏览器和服务器之间传输数据。Chunked编码是HTTP协议(特别是HTTP/1.1版本)中的一...同时,网络管理员也需要关注chunked编码对服务器性能和网络流量的影响。

    VC++实现基于MFC的Web服务器程序

    在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC) 库在Visual C++ 6.0环境下实现一个简单的Web服务器程序。MFC是微软为C++开发人员提供的一套面向对象的类库,它封装了Windows API,使得Windows...

    对chunked编码进行解码

    一个对chunked编码进行解码的例子,通过java socket实现发送http请求,对gzip压缩的消息体进行解码处理。

    MTOM Web Services 2005

    总之,MTOM Web Services 2005是.NET 2.0时代提升Web服务中大文件传输效率的重要技术。通过VS 2005和WSE,开发者能够方便地创建和利用支持MTOM的Web服务,从而在保持XML的结构化优势的同时,显著降低网络带宽的消耗...

    MTOM Web Services 2008

    在.NET Framework 2.0及更高版本中,Microsoft提供了Windows Communication Foundation (WCF)作为构建Web服务的新平台,取代了早期的Web Services Enhancements (WSE)。然而,VS 2008仍然支持WSE,尽管WCF通常是更好...

    Burpsuite插件之chunked-coding-converter使用方法1

    这个插件的主要功能是编码和解码使用了chunked编码的数据,从而帮助安全测试人员在进行Web应用程序渗透测试时绕过WAF(Web应用防火墙)的检测。 WAF通常会检查HTTP请求的完整内容,包括请求体的长度,以防止恶意...

    boost之http请求及chunked解析

    在这种编码方式下,响应体被分成若干个较小的数据块(或称为“chunk”),每个块前都有一个表示该块大小的十六进制数字。这种方式特别适用于服务器无法提前知道响应体总长度的情况,例如动态生成的内容。 在Boost....

    HTTP chunked方式传输的C语言解析示例

    程序可能还包括错误检查和异常处理机制,以确保在遇到无效数据或网络问题时能妥善处理。 编写这样的程序需要对HTTP协议有深入的理解,并熟悉C语言的基本I/O操作。此外,为了确保兼容性,还需要考虑不同的网络环境和...

    chunked-coding-converter-1.0.jar

    主要来源是https://github.com/c0ny1/chunked-coding-converter 这里感谢下c0ny1师傅的分享 但基于此基础,这里是我个人已经编译完成好的,省去编译步骤,小白皆可使用,可以直接使用burp导入插件

    http1.1的chunked协议解析

    其中块大小由一个或多个十六进制数字表示,块扩展可以包含多个分号分隔的扩展名(chunk-ext-name)和值(chunk-ext-val)对。块数据是实际传输的数据,其长度等于块大小所指定的值。 #### 最后块 最后块是一个特殊块,...

    netty案例,netty4.1中级拓展篇十一《Netty基于ChunkedStream数据流切块传输》源码

    netty案例,netty4.1中级拓展篇十一《Netty基于ChunkedStream数据流切块传输》源码 ...

    java 使用socked接收chunck分块数据

    在chunked模式下,数据被分为多个块,每个块都有一个十六进制的大小前缀,后面跟着块的实际内容,最后是一块大小为0的块表示数据结束。 以下是一个基本的Java代码示例,展示如何使用Socket来接收chunked数据: ```...

    windows下nginx-http-flv-module一键部署 非常方便

    1. **编译Nginx**:在Windows环境下,我们可以使用Visual Studio等IDE或者 Mingw-w64 这样的交叉编译工具。打开命令行,进入Nginx源代码目录,运行以下命令进行配置: ``` ./configure --prefix=path\to\nginx --...

    burpsuite分块传输插件chunked-coding-converter.0.2.1.jar

    burpsuite分块传输插件,一键生成分块传输请求,用于bypass waf等

    php下HTTP Response中的Chunked编码实现方法

    每个Chunk分为头部和正文两部分,头部内容指定下一段正文的字符总数(十六进制的数字)和数量单位(一般不写),正文部分就是指定长度的实际内容,两部分之间用回车换行(CRLF)隔开。在最后一个长度为0的Chunk中的...

    nginx for windows下载以及详细安装与配置

    1.目前官方 Nginx 并不支持Windows,您只能在包括Linux,UNIX,BSD系统下安装和使用,现在提供nginx for windows下载以及详细安装与配置,供windows下的nginx应用。 2.Nginx 本身只是一个HTTP和反向代理服务器,它无法...

Global site tag (gtag.js) - Google Analytics