当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 5 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 新建了一个开源项目<myhttpd>希望大家提供建议
帖子发表于 : 2011-01-06 11:30 

注册: 2011-01-06 11:24
帖子: 10
送出感谢: 0 次
接收感谢: 0 次
svn co https://myhttpd.svn.sourceforge.net/svnroot/myhttpd myhttpd

http://sourceforge.net/projects/myhttpd/

不管网络应用还是本地应用,都可以从逻辑上分成‘服务’和‘展示’两部分,服务部分通过一定的手段(协议)与展示部分交互,其中展示部分可以使用各种gui库,或者命令行实现。更一般的,服务的接口如果采用http方式提供(有的服务可能不适合),则展示部分完全可以使用标准的浏览器来访问定制的网页形式呈现了。这样做的好处至少包括:
1. 统一的服务接口:使用http,意味着天然可以利用http的属性,如http authentication,文本化接口(便与调试),大量现成的client(浏览器,curl, wget...);
2. 更灵活的用户界面:用户界面可以就是html页面了;
3. 服务的部署:所有的服务使用uri标记,取消部署的限制......
4. http在网络防火墙中的优势:...

myhttpd 从来没有希望成为一个通用httpd的野心,所以myhttpd也不会下大精力优化性能,其实优化性能更有效的手段是改进‘服务’的实现,myhttpd仅仅起了一个中转的作用。

myhttpd 包含以下特性:
1. 多线程:每个tcp连接一个工作线程。这样做的目的是减少服务编写时的'协作'考虑,服务完全可以阻塞当前线程;
2. 提供一个plugin模式:每个服务都将作为一个myhttpd的plugin,myhttpd处理底层的协议解析,并且把http request转发到匹配的plugin(服务)中;

myhttpd 基本结构:
1. http message解析器:在 EHttpMsgParser.java 中实现;
2. 多线程tcp server:在 HttpSockSrv.java 中实现;
3. 插件管理:在 EPluginMgrt.java 中实现;
4. url解析:在 EUrl.java 中实现;
5. plugin编写规范(接口):在 IMyHttpPlugin.java 中声明;

myhttpd 基本流程:
1. 初始化:根据 plugins.conf 描述,加载指定的 class(plugin);
2. 使用 11559 tcp port 启动 HttpSockSrv,等待连接;
2.1 自从内置了 authen 模块后,添加了这一步:当收到 request 后,检查 protected.conf 中url是否收到保护,如果收到保护,则返回401,并要求 digest authentication,只有通过了,才进行 3;
3. 收到连接后,解析 tcp stream,得到完整 IHttpMsg 后,依次查询所有plugins,当 url_match()时,执行改plugin的 onRequest();
4. 如果没有匹配的 plugin,执行缺省的 http server 行为;

myhttpd 源自作者工作中的一个项目,不过原始项目是 c/c++ 的,这里使用 java 完全重新实现一个,不会有任何授权问题。当myhttpd开发差不多后,将考虑使用 BSD 协议分发。

运行myhttpd:
cd bin/
./run.sh
如果顺利,此时myhttpd启动了,并且绑定监听端口 11559,可以使用浏览器输入
http://localhost:11559/admin/help
了,help 是一个非常简单的 plugin,自己看代码就行了。

使用 http authentication 保护指定的 url:
编辑 bin/protected.conf,将需要保护的url的前缀部分与希望使用的口令文件名字绑定,如
/admin:password
的意思是:当需要访问 /admin 开始的 url 时,必须通过 password 中的用户认证;

使用 java myhttpd.utils.Passwd <passwd filename> 来生成,更新,添加口令文件,如希望生成 password 文件,则
java myhttpd.utils.Passwd password
将提示输入用户名,口令,完成后,新的用户信息已经保存到 password 文件中了,删除用户,直接使用文本编辑器删除用户对应的那一行即可。

内置模块:
1. admin: 代码在 src/myhttpd/plugins/PAdmin.java 中:用于实现一些认为是admin的工作 :),如列出已经加载的 plugins;
2. authen: 代码在 src/myhttpd/plugins/PAuthen.java 中:实现了 rfc2617中 digest authentication。


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 新建了一个开源项目<myhttpd>希望大家提供建议
帖子发表于 : 2011-01-09 13:29 
头像

注册: 2007-07-11 21:43
帖子: 3382
地址: 东江边
系统: archlinux
送出感谢: 15
接收感谢: 7
这个又红又专,只有专业的人士才能用得上,我打酱油的……


_________________
我来了,我看见了,我征服了!
求勾搭,不管饭。


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 新建了一个开源项目<myhttpd>希望大家提供建议
帖子发表于 : 2011-01-09 18:22 
头像

注册: 2009-11-06 19:48
帖子: 265
送出感谢: 0 次
接收感谢: 0 次
想个好名字 :em04 :em02 :em02


_________________
http://hi.baidu.com/wmpotato

Debian~Debian~Debian~~~


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 新建了一个开源项目<myhttpd>希望大家提供建议
帖子发表于 : 2011-01-09 19:47 
头像

注册: 2009-10-09 12:54
帖子: 989
地址: 北京某胡同
系统: debian
送出感谢: 4
接收感谢: 2
这个是干啥用的? :em06


_________________
python写的一个跨平台的聊天软件TChat。支持文件传输。
android防火墙droidwall更新,添加月流量统计功能。有兴趣的点我:D
原创Android社交应用[飘],开源免费!


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 新建了一个开源项目<myhttpd>希望大家提供建议
帖子发表于 : 2011-01-10 9:11 

注册: 2011-01-06 11:24
帖子: 10
送出感谢: 0 次
接收感谢: 0 次
这个东西主要还是面向应用开发者的,主要目的是为了:强制使用http接口分离"逻辑"与"界面"!使用http接口,意味着界面部分应该使用 html,js 来实现,甚至可以是 flash。

相信使用flash能够轻松实现我们使用c++很难实现的界面特效。

当然这种结构不一定适用所有服务类型。

myhttpd其实就是一个http server,但主要目的就是为了实现上面的目标的,而不是作为一个通用http server,所以对每个连接都使用一个独立的工作线程,就是说,每个逻辑实例不互相干扰。如果类似lighttpd使用poll,就不爽了。

(使用java,主要为了方便移植android,但我还是初学java,所以代码还是c风格的 :em06 )


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 5 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译