深入研究FastCGI 第一步

June 25th, 2010 陈毓端 comments
[文章作者:陈毓端 若转载请标注原文链接:http://www.woyuw.com/?p=801]

说道FastCGI 大家都觉得它比CGI的效率高 具体高在那?很多人会说CGI需要不断的fork 对系统压力大。
其实第一次接触FastCGI是在应用Nginx环境时候,今天再次理下FastCGI 到底是什么?
从官方(http://www.fastcgi.com)的About FastCGI
第一句话就告诉我们:
FastCGI is simple because it is actually CGI with only a few extensions.
FastCGI 其实是一些简单CGI的扩展
Like CGI, FastCGI is also language-independent. For instance, FastCGI provides a way to improve the performance of the thousands of Perl applications that have been written for the Web.
如CGI ,FastCGI也具备语言无关系性。例如,FastCGI 提供一种的方法来提高Prel应用程序的处理能力。
既然是简单的CGI扩展那它的优势在那呢? 难道又是所谓的“重复造车”?
再看看官方的一句重要的解释
Like CGI, FastCGI runs applications in processes isolated from the core Web server, which provides greater security than APIs. (APIs link application code into the core Web server, which means that a bug in one API-based application can corrupt another application or the core server; a malicious API-based application can, for example, steal key security secrets from another application or the core server.)
如CGI , FastCGI 独立运行于WEB服务器的核心进程。并提供大量的安全API。 后面的英文我觉得说的有点严肃。它告诉我们一个问题,FastCGI出现问题之后,以至于不会破坏WEB server的核心进程,一句话WEB server 还可以使用脱离FastCGI的应用。
简单的说就是某些核心应用的托管。 如 托管 Nginx的PHP 解析器进程。
spawn-fcgi.c的核心代码
static int fcgi_spawn_connection(char *appPath, char **appArgv, char *addr, unsigned short port, const char *unixsocket, int fork_count, int child_count, int pid_fd, int nofork);
static int find_user_group(const char *user, const char *group, uid_t *uid, gid_t *gid, const char **username);
最近真的要看看里面的代码。
Nginx的fast-cgi 源码在: src/http/modules/ngx_http_fastcgi_module.c  可以详细的研究下,再次鞭策自己。
FastCGI 的API文档:http://www.fastcgi.com/drupal/node/5
Categories: c, linux, 编程语言 Tags:

小型vps nginx+php-cgi 内存过大应急预案

April 30th, 2010 陈毓端 comments
[文章作者:陈毓端 若转载请标注原文链接:http://www.woyuw.com/?p=783]

朋友买了台vps 内存在512M ,有时候多个cgi进程是的内存使用过大 导致502错误

除了基本的优化外 ,这里就不写了,网上一堆。

应急预案脚本

#!/bin/sh
function fastCgiRestart(){
killall -9 php-cgi
/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000   -u www -f /usr/local/php5/bin/php-cgi
}
function startNginx(){
/usr/local/nginx/sbin/nginx -t
}
while true
do
echo `free | awk ‘{print $3}’` | awk ‘{print $2}’ >a
usemem=`cat a`
echo `free | awk ‘{print $2}’` | awk ‘{print $2}’ >b
countmem=`cat b`
usememcache=”$usemem”
sysmemcache=”$countmem”

if [ $usememcache -gt 511111 ] ; then
fastCgiRestart
startNginx
else
echo ’sys is ok’
fi
sleep 5
done

注释:

# if [ $usememcache -gt 511111 ] ; then   表示但内存达到511111 时候重启php-cgi具体的参数可以依照内存的大小而定

总之这个《应急预案》是主动出击,保证站点的运行。


Categories: linux Tags:

gnome-terminal 错误记录

April 25th, 2010 陈毓端 comments
[文章作者:陈毓端 若转载请标注原文链接:http://www.woyuw.com/?p=779]

今天我的redhat5启动发生如下错误:在为 gnome-terminal 装入或保存配置信息时发生错误。您的某些配置设置可能不能正常工作。

打开终端:rm -rf /tmp/*

重启 ok。

Categories: linux Tags:

Android编程体验

April 9th, 2010 陈毓端 comments
[文章作者:陈毓端 若转载请标注原文链接:http://www.woyuw.com/?p=771]

Android编程体验

当今Mobile OS 虽四足鼎立, 但windows mobile 传统优势正在消失, Symbian颇显老矣, iPhone OS 秉承苹果一贯的作风高高在上,唯有Google Android还算比较优质兼平民,这点从G4就可以看出。
以前倒腾过windows mobile的编程,再看看现在的android编程真是相差蛮多的。虽然两者都是基于java编程。Android更能体现java高度配置的特性。
Android的编程环境搭建也比较容易
安装
1 android-sdk-windows
2 Eclipse + ADT

Android的编程过程比较人性化 以下是重点

重要配置

— layout 界面布局文件
Main.xml 界面核心XML配置
…… 其它更能界面配置

— values 变量定义文件夹
Strings.xml 可以理解为程序的语言包配置文件

— AndroidManifest.xml 十分重要的活动控制中枢 如对话框等活动都要向它登记 比较强势的文件

以下的我的一个例子截图

Categories: java Tags:

被肯德基第二轮秒杀

April 7th, 2010 陈毓端 comments
[文章作者:陈毓端 若转载请标注原文链接:http://www.woyuw.com/?p=762]

秒杀地点:肯德基北京安定门店
秒杀主题:肯德基中国公司于北京时间2010年4月6日发起了“超值星期二 特别秒杀”活动,有效期4月6日至4月9日。
秒杀内容: 超值星期二 热别秒杀 外带全家桶一份 原价64.00元 力减32元。
秒杀过程 :怀着对肯德基品牌的几分热度掏出优惠券,“它”说我的优惠价已经第二轮甚至第三轮了。

秒杀”一种快速而高效的制敌方式。呈几何时蜂拥互联网。
近来一些公司也看中其公关效应,大力“秒杀”消费者的热情。典型的案例是“淘宝的一元秒杀房子”。

我们“被秒杀”了

又一次“被”

肯德基说只想让秒杀“N元” 可是对肯德基品牌忠诚的中国人疯狂了

肯德基怕了

“不是怕中国人疯狂 因为他们爱我们”肯德基说

“坚持住” “沉默住” 他们会散去

于是他们坚持住了

无情的白纸写着 “中国人“ 你们已经是二轮或三轮了

我怕了 请不要再秒杀我了

“让利 超值” 一种可笑公关

可笑活动的开始 注定要秒杀消费者

可笑活动的开始 注定要秒杀企业的信用



Categories: Uncategorized Tags:

网页正文提取

April 6th, 2010 陈毓端 1 comment
[文章作者:陈毓端 若转载请标注原文链接:http://www.woyuw.com/?p=757]

网页正文提取的算法很多也很复杂 当然准确度更有不同

技术难点无非就是在正文除噪

我的实现方法是《基于相似度及密度匹配》

1 网页分块

2 标题相似度匹配

3 求网页平均长度及密度

下图是sina的一篇新闻最终页密度值及相似度波形图:

先放出demo

http://www.woyuw.com/exthtml/

准确度还有待提高

Categories: php, 算法 Tags:

vc/delphi 获取IE8 的URL

January 26th, 2010 陈毓端 comments
[文章作者:陈毓端 若转载请标注原文链接:http://www.woyuw.com/?p=728]

在进行IE toolbar(工具条)开发的时候会碰到IE版本差距 造成的句柄获取为空,主要是ie8采用了卡片切换的原因。我之前是用delphi 进行 ie toolbar开发 因为图delphi的方便。说实在话 vcl的开发效率要比atl高。但是受限vcl 的 ie8 线程问题 后来改用vc 的atl。(做客服端我还是选用vcl)。

回到正题 delphi和vc获取ie8当前url的方法

delphi

  1. function GetUrlFromIE8 (Handle: THandle; List: TStringList): boolean; stdcall;
  2. var
  3. hWndIE, hWndIEChild : HWND;
  4. Buffer : array[0..255] of Char;
  5. begin
  6. SendMessage(Handle, WM_GETTEXT,1023, integer(@Buffer[0]));
  7. hWndIE := FindWindow(‘IEFrame’, Buffer);
  8. if (hWndIE > 0)
  9. begin
  10. hWndIEChild := FindWindowEx(hWndIE, 0, ‘WorkerW’, nil);
  11. if (hWndIEChild > 0) and (ie8log=0) then
  12. begin
  13. hWndIEChild := FindWindowEx(hWndIEChild, 0, ‘ReBarWindow32′, nil);
  14. hWndIEChild := FindWindowEx(hWndIEChild, 0, ‘Address Band Root’,nil);
  15. hWndIEChild := FindWindowEx(hWndIEChild, 0, ‘edit’,nil);
  16. SendMessage(hWndIEChild, WM_GETTEXT, 1023, integer(@Buffer));
  17. thisUrl:=Buffer;
  18. showmessage(thisUrl);
  19. end;
  20. end;

vc:

  1. HWND IEURLhwnd = 0;
  2. IEURLhwnd = ::FindWindowEx(IEURLhwnd, 0,TEXT(“IEFrame”), NULL);
  3. IEURLhwnd = ::FindWindowEx(IEURLhwnd,0,TEXT(“WorkerW”), NULL);
  4. IEURLhwnd = ::FindWindowEx(IEURLhwnd,0,TEXT(“RebarWindow32″), NULL);
  5. IEURLhwnd = ::FindWindowEx(IEURLhwnd,0,TEXT(“Address Band Root”), NULL);
  6. IEURLhwnd = FindWindowEx(IEURLhwnd, 0,TEXT(“Edit”), NULL);
  7. TCHAR IEURL[1024];
  8. memset(IEURL, 0, sizeof TCHAR * 1024);
  9. ::SendMessage(IEURLhwnd, WM_GETTEXT, 1024, (LPARAM)IEURL);
  10. MessageBox(IEURL);

另外, 具体的窗体 可以用spy 进行查看。

Categories: Uncategorized Tags:

利用 FastDFS 构建分布式图片服务器

November 29th, 2009 陈毓端 1 comment
[文章作者:陈毓端 若转载请标注原文链接:http://www.woyuw.com/?p=724]

最近的项目中一个早期规划的版面大部分基于文字的,图片不多,所以前期没有做图片分离,随着公测,以及页面效果的体验。
决定要用大量图片来做视觉冲击。所以必须架设分布式文件系统来实现图片分离。之前用过mogilefs,感觉还是不错,就是配置起来还是繁琐,
并且是基于mysql做节点日志控制的,所以比较麻烦点。
之所以采用FastDFS,使用它协议比较简单。php操作也比较方便,当然更重要的是性能也不错。

简单配置
/*————–安装—————————*/
wget http://fastdfs.googlecode.com/files/FastDFS_v1.22.tar.gz
tar zvxf FastDFS_v1.22.tar.gz
cd FastDFS
./make.sh
./make.sh install

/*————–配置—————————*/
服务器设定

tracker: 192.168.1.1
storage: 192.168.1.2

/*————–添加配置文件—————————*/
mkdir /usr/local/fasrdfs/
vim /usr/local/fasrdfs/tracker_config
vim /usr/local/fasrdfs/storage_config

/*——tracker_config——–tracker(跟踪器)服务器——————-*/

bind_addr=
port=22122
network_timeout=20
base_path= /www/dlsite/uploads/events/
max_connections=256
store_lookup=0
store_group=group2
store_server=1
reserved_storage_space = 4GB
log_level=info
run_by_group=
run_by_user=
allow_hosts=*

/*——storage_config——–存储节点(storage)服务器—————–*/

disabled=false
group_name=group1
bind_addr=12
port=23000
network_timeout=20
heart_beat_interval=30
stat_report_interval=600
base_path=/www/dlsite/uploads/events/
sync_wait_msec=200
max_connections=256
tracker_server=192.168.1.2:22122
log_level=info
run_by_group=
run_by_user=
allow_hosts=*

/*——————-启动————————————*/
/usr/local/bin/fdfs_trackerd /usr/local/fastdfs/tracker_config
/usr/local/bin/fdfs_storaged /usr/local/fastdfs/storage_config

/*————–向存储节点(storage)发送数据—————————*/

/usr/local/bin/fdfs_test /usr/local/fastdfs/storage_config upload 数据文件
/*————–查看进程—————————*/
ps aux | grep fdfs

Categories: Uncategorized Tags:

网络抓包(嗅探)/协议分析 工具ethereal

October 14th, 2009 陈毓端 comments
[文章作者:陈毓端 若转载请标注原文链接:http://www.woyuw.com/?p=695]

在常规的开发过程中,如b/s开发 一般的firebug 或其他工具来做网络的请求分析。但是具体的一些内容还是无法全面的获取。如tcp,端口等。

如果在开发基于curl的模拟登录应用,如sns社区常用模块中的获取163 邮箱的好友列表.这将是一款不错的分析工具.
下面是ethereal 分析的截图

QQ的协议地址

2

Categories: php, 其他 Tags:

mmseg 安装错误 error: ’strncmp’ was not declared in this scope

October 13th, 2009 陈毓端 comments
[文章作者:陈毓端 若转载请标注原文链接:http://www.woyuw.com/?p=691]

mmseg 安装错误

  1. css/UnigramCorpusReader.cpp: In member function 'virtual int css::UnigramCorpusReader::open(const char*, const char*)':
  2. css/UnigramCorpusReader.cpp:89: error: 'strncmp' was not declared in this scope
  3. make[2]: *** [UnigramCorpusReader.lo] Error 1
  4. make[2]: Leaving directory `/lamp/mmseg-0.7.3/src'
  5. make[1]: *** [all-recursive] Error 1
  6. make[1]: Leaving directory `/lamp/mmseg-0.7.3'
  7. make: *** [all] Error 2

解决办法

  1. vim src/css/UnigramCorpusReader.cpp

添加

  1. #include <string.h>

ok!

Categories: c, linux Tags: