C++实现http简易代理服务器
我正在做与你同样的工作,我选择了mongoose,一款开源的http服务器。
http://codegooglecom/p/mongoose/
这是它的网站,可以下载源码,并且协议非常自由。
有不明白之处可以联系我。我正在基于mongoose进行开发。
=========================================
源码在这里可以下载到,http://codegooglecom/p/mongoose/downloads/list
我也只是一个c程序员,不太会网络编程。但用mongoose的确非常简单,因为就是c++写的,你应该看起来不费劲。
1、首先确定IIS是否已安装,如果已安装,此步骤可以略过,在控制面板中找到“添加/删除window组件”,点击“Internet信息服务”,继续下一步,中途如果提示缺少什么文件的话,点击只管选择IIS包中的文件即可。点击下步至到完成。2、web站点的配置,windows XP从“控制面板”->“性能和维护”-> “管理工具”中找到“Internet信息服务”,点击打开该服务的管理窗口如图所示。3、IIS中一般都包含有一个默认web站点,它的站点文件夹是“c:\inetpub\wwwroot”下面我们看web站点的配置,选中“默认站点”,单击鼠标右键,可以看到弹出菜单中有多种相关web站点的设置。4、而选择“新建”中的“虚拟目录”就可以为该web站点新建一个虚拟目录。5、设置网站的默认打开文档,即当在IE中输入网站url地址后首先打开的网页,一般是网站的主页。
(1)ApacheApache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上。Apache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的Web服务器软件之一。Apache取自"a patchy server"的读音,意思是充满补丁的服务器,因为它是自由软件,所以不断有人来为它开发新的功能、新的特性、修改原来的缺陷。Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用。(2)IIS是英文Internet Information Server的缩写,译成中文就是"Internet信息服务"的意思。它是微软公司主推的服务器,最新的版本是Windows2008里面包含的IIS 7,IIS与Window Server完全集成在一起,因而用户能够利用Windows Server和NTFS(NT File System,NT的文件系统)内置的安全特性,建立强大,灵活而安全的Internet和Intranet站点。(3)GFEGoogle的web服务器,用户数量激增。目前紧逼iis。(4)Nginx不仅是一个小巧且高效的HTTP服务器,也可以做一个高效的负载均衡反向代理,通过它接受用户的请求并分发到多个Mongrel进程可以极大提高Rails应用的并发能力。(5)Lighttpd是由德国人 Jan Kneschke 领导开发的,基于BSD许可的开源WEB服务器软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的web server环境。具有非常低的内存开销,CPU占用率低,效能好,以及丰富的模块等特点。Lighttpd 是众多OpenSource轻量级的web server中较为优秀的一个。支持FastCGI, CGI, Auth, 输出压缩(output compress), URL重写, Alias等重要功能。(6)Zeus是一个运行于Unix下的非常优秀的Web Server,据说性能超过Apache,是效率最高的Web Server之一。(7)Sun的Java系统Web服务器也就是以前的Sun ONE Web Server。主要出现在那些运行Sun的Solaris操作系统的关键任务级Web服务器上。它最新的版本号是61,可以支持x86版本Solaris,Red Hat Linux,HP-UX 11i, IBM AIX,甚至可以支持Windows,但它的大多数用户都选择了SPARC版本的Solaris操作系统。(8)Resin提供了最快的jsp/servlets运行平台。在java和javascript的支持下,Resin可以为任务灵活选用合适的开发语言。Resin的一种先进的语言XSL(XML stylesheet language)可以使得形式和内容相分离。(9)Jetty是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。(10)BEA WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。 BEA WebLogic Server拥有处理关键Web应用系统问题所需的性能、可扩展性和高可用性。(11)Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
怎么编写网站的HTTP反向代理服务器在Nodejs上实现一个简单的HTTP代理程序还是非常简单的,本文章的例子的核心代码只有60多行,只要理解内置http模块的基本用法即可,具体请看下文。
接口设计与相关技术
使用httpcreateServer()创建的HTTP服务器,处理请求的函数格式一般为function(req,res){}(下文简称为requestHandler),其接收两个参数,分别为httpIncomingMessage和httpServerResponse对象,我们可以通过这两个对象来取得请求的所有信息并对它进行响应。
主流的NodejsWeb框架的中间件(比如connect)一般都有两种形式:
中间件不需要任何初始化参数,则其导出结果为一个requestHandler
中间件需要初始化参数,则其导出结果为中间件的初始化函数,执行该初始化函数时,传入一个options对象,执行后返回一个requestHandler
为了使代码更规范,在本文例子中,我们将反向代理程序设计成一个中间件的格式,并使用以上第二种接口形式:
//生成中间件
consthandler=reverseProxy({
//初始化参数,用于设置目标服务器列表
servers:["127001:3001","127001:3002","127001:3003"]
});
//可以直接在http模块中使用
constserver=httpcreateServer(handler);
//作为中间件在connect模块中使用
appuse(handler);
说明:
上面的代码中,reverseProxy是反向代理服务器中间件的初始化函数,它接受一个对象参数,servers是后端服务器地址列表,每个地址为IP地址:端口这样的格式
执行reverseProxy()后返回一个function(req,res){}这样的函数,用于处理HTTP请求,可作为httpcreateServer()和connect中间件的appuse()的处理函数
当接收到客户端请求时,按顺序循环从servers数组中取出一个服务器地址,将请求代理到这个地址的服务器上
服务器在接收到HTTP请求后,首先需要发起一个新的HTTP请求到要代理的目标服务器,可以使用httprequest()来发送请求:
constreq=httprequest(
{
hostname:"目标服务器地址",
port:"80",
path:"请求路径",
headers:{
"x-y-z":"请求头"
}
},
function(res){
//res为响应对象
consolelog(resstatusCode);
}
);
//如果有请求体需要发送,使用write()和end()
reqend();
要将客户端的请求体(Body部分,在POST、PUT这些请求时会有请求体)转发到另一个服务器上,可以使用Stream对象的pipe()方法,比如:
//req和res为客户端的请求和响应对象
//req2和res2为服务器发起的代理请求和响应对象
//将req收到的数据转发到req2
reqpipe(req2);
//将res2收到的数据转发到res
res2pipe(res);
说明:
req对象是一个ReadableStream(可读流),通过data事件来接收数据,当收到end事件时表示数据接收完毕
res对象是一个WritableStream(可写流),通过write()方法来输出数据,end()方法来结束输出。
以上就是小编对于怎么编写网站的HTTP反向代理服务器的解答。
服务器网站代理服务器写网站
0条评论