[经常用到]VI中复制与粘贴基本方法,特别是剪切功能:剪切多行。
Unix/LinuxC技术 jackxiang 2011-12-21 21:09
x:剪切当前字符到剪贴板。
dd :剪切当前光标所在处的行
ndd :剪切当前光标所在处及以下的n行
来自:
http://blog.itpub.net/25836975/viewspace-697911
http://hi.baidu.com/jqorwrlvdwbfqvq/item/7b717ef599abba1dfe3582cc
vim有复制并粘贴的命令,比如
:1, 10 co 20
但是这个命令执行完以后,1-10行仍然存在,我想实现将1-10剪切并粘贴到20行之后,有类似的命令么?一行代码能做到么?
:1,10 m 20
来自:
http://bbs.chinaunix.net/thread-3688477-1-1.html
——————————————————————————————————————
d:剪贴选中的内容到剪贴板。
y:拷贝选中的内容到剪贴板。
c:剪贴选中的内容到剪贴板并且进入插入模式。
我们先做这样一个小小的尝试,请打开浏览器,从网页上随便复制一段文字,然后打开VIM,用VIM,用"p"粘贴一下,你会发现,什么都没有站贴过来,原因是这样的,不同于Windows,VIM具有多个剪贴板,并且和系统剪贴板是完全独立的,所以当你复制浏览器里的文字的时候,这段文字保存在了系统剪贴板,当你是用"p"来粘贴的时候,实际上,他读取的是VIM的剪切板。
那怎么方便的将系统剪贴板的内容复制过来呢?简单!用另外一个快捷方式"Shift+Insert"就可以了,如果你在使用Gvim的话,直接用鼠标中键也可起到相同的作用。是不是很简单?
OK!我们开始进阶!
我们前面说过,VIM具有多个剪切板,目的是为了用户在做较复杂的字符处理的时候,可以更方便的复制粘贴。请现在使用一下":reg"命令(先按 ESC键,退出编辑模式,然后按:进入命令模式,然后输入reg回车),看到了?屏幕上的输出结果!是不是特别眼熟,对了!就是您之前复制过的所有内容!也许这时候您还发现,VIM的剪切板原来有这么多个,按照数字还有符号一个一个的区分开的,这里举一个编号的例子--""5,看到了吗?是以"开头的。还有!有没有看到编号为"+的剪切板?里面的内容是不是刚才你在浏览器里复制的那段文字啊?呵呵……没错了!系统剪切板的编号就是"+。
好了,这时候您已经知道了如何查看之前的所有剪贴板内容,我们现在就试着把某一个特定剪切板的内容复制进我们正在编辑的文件中。我们知道,vi的粘贴指令是"p",但是如果要粘贴一个特定的剪贴板,只是用p就不行了,那怎么办?简单!把剪贴板的编号带上不就可以了?现在先按ESC,退出编辑模式,然后依次按"+p这三个字符(怎么按?不会吧!"和+怎么按?用Shift啊!),好了!你看看,之前在浏览器中复制的这段文本,是不是被粘贴进文档中了? 如何将系统剪切板里的内容复制进VIM当中,您已经清楚了。那如何将ViM中复制的字符粘贴到其他地方呢?很简单,我们只需要把要复制的文字,复制进 "+剪切板不就可以了?("+剪切板是系统剪切板,忘记了?)在VIM中,复制的指令是y(在非编辑模式下按y就可以了),那要将文本复制进指定的剪切板,只需要加上剪切板的编号就可以了。举个例子,我们希望把VIM中的一段文本复制下来,然后粘贴到浏览器的地址栏中:第一步,现把需要复制的文字选中(非编辑模式下),然后在键盘上依次按"+y这三个字符,OK!已经复制下来了,现在用:reg命令看看,是不是在"+剪切板中了? 好了,目前为止,您已经大致掌握了VIM剪切板的基本用法,当然,VIM剪切板的功能还很强大,本文也不能尽数道来,就请您继续发掘吧。
vi中多个文件相互之间的复制、粘贴功能简介!
发布: 2007-6-08 22:43 | 作者: seanhe | 来源: | 查看: 25次 | 进入软件测试论坛讨论
昨天有人提出此类问题,我特地加以编辑一下,请大家共享,可能写的不好!
大家在vi编辑中,常常遇到想把文件A里面的一行或多行,复制到B文件里面去
(可能很多人不知道怎么办),该怎么做了?
下面是几中方法:
1.如果你有多台机器,而且是联网的,你可以.netterm虚拟终端,telnet登陆主机对A文件进行修改、复制,然后打开B文件粘贴过去!
2.如果是单机,当然要用unix自带的编辑功能呢
先简单介绍一些vi编辑里的命令:
(A).yw 将当前字存入无名缓冲区,前面可加"x,表示存入名字为x的有名
缓冲区(x为a-z),也可加数字表示存入的字数,以后可用P或p命
令取出
yy 将当前行存入无名缓冲区,用法参看yw
(B).命令如下:a-Z 是缓冲区,也可移出数字1-9指定的删除缓冲区
利用命名缓冲区可很好地保存若干文本段,便于以后存取、移动或者重排。这些缓冲区用a到z字母命名!为了访问这些缓冲区中的一个,要使用双引号
例如:要把一行插入a缓冲区,可键入:
"ayy
为了把这个文本放回该文件中,键入"ap
(c).m做标志命令:
m 字母 用字母标记当前行,以后可用 '字母使光标移动到当前行,
(参看'命令)
列子:1。将a文件中的4行到b文件中
命令如下:"ay4+
:ex b (转到b文件中)
然后"ap
2. 将a中多行复制到b文件中
先在开始处做标志mk
然后在末尾用"ay'k (光标自动回到开始处,此时已经把你的内容放到缓冲区了)
其中a表示缓冲区a
然后用ex转义到你的文件B中,然后用"ap命令粘贴就行
3。如果你文件中有多次要复制粘贴的话,看下面:
a表示缓冲区a ,你还继续可以使用缓冲b吗
缓冲区有a-z和1-9这么多
缓冲区就好象windows下的煎切版一样,它有好多个,你可以把你想要的复制进去,然后粘贴,只不过你用"ay时候多换a就是了,如你要复制462行用"ay ,复制536行用"by
我编写的不好,恳请斑竹帮我修改和补充,谢谢
来自:http://hi.baidu.com/%B4%FA%CD%F2%BB%D4/blog/item/56d18ddf9eb3d4d58c102969.html
dd :剪切当前光标所在处的行
ndd :剪切当前光标所在处及以下的n行
来自:
http://blog.itpub.net/25836975/viewspace-697911
http://hi.baidu.com/jqorwrlvdwbfqvq/item/7b717ef599abba1dfe3582cc
vim有复制并粘贴的命令,比如
:1, 10 co 20
但是这个命令执行完以后,1-10行仍然存在,我想实现将1-10剪切并粘贴到20行之后,有类似的命令么?一行代码能做到么?
:1,10 m 20
来自:
http://bbs.chinaunix.net/thread-3688477-1-1.html
——————————————————————————————————————
d:剪贴选中的内容到剪贴板。
y:拷贝选中的内容到剪贴板。
c:剪贴选中的内容到剪贴板并且进入插入模式。
我们先做这样一个小小的尝试,请打开浏览器,从网页上随便复制一段文字,然后打开VIM,用VIM,用"p"粘贴一下,你会发现,什么都没有站贴过来,原因是这样的,不同于Windows,VIM具有多个剪贴板,并且和系统剪贴板是完全独立的,所以当你复制浏览器里的文字的时候,这段文字保存在了系统剪贴板,当你是用"p"来粘贴的时候,实际上,他读取的是VIM的剪切板。
那怎么方便的将系统剪贴板的内容复制过来呢?简单!用另外一个快捷方式"Shift+Insert"就可以了,如果你在使用Gvim的话,直接用鼠标中键也可起到相同的作用。是不是很简单?
OK!我们开始进阶!
我们前面说过,VIM具有多个剪切板,目的是为了用户在做较复杂的字符处理的时候,可以更方便的复制粘贴。请现在使用一下":reg"命令(先按 ESC键,退出编辑模式,然后按:进入命令模式,然后输入reg回车),看到了?屏幕上的输出结果!是不是特别眼熟,对了!就是您之前复制过的所有内容!也许这时候您还发现,VIM的剪切板原来有这么多个,按照数字还有符号一个一个的区分开的,这里举一个编号的例子--""5,看到了吗?是以"开头的。还有!有没有看到编号为"+的剪切板?里面的内容是不是刚才你在浏览器里复制的那段文字啊?呵呵……没错了!系统剪切板的编号就是"+。
好了,这时候您已经知道了如何查看之前的所有剪贴板内容,我们现在就试着把某一个特定剪切板的内容复制进我们正在编辑的文件中。我们知道,vi的粘贴指令是"p",但是如果要粘贴一个特定的剪贴板,只是用p就不行了,那怎么办?简单!把剪贴板的编号带上不就可以了?现在先按ESC,退出编辑模式,然后依次按"+p这三个字符(怎么按?不会吧!"和+怎么按?用Shift啊!),好了!你看看,之前在浏览器中复制的这段文本,是不是被粘贴进文档中了? 如何将系统剪切板里的内容复制进VIM当中,您已经清楚了。那如何将ViM中复制的字符粘贴到其他地方呢?很简单,我们只需要把要复制的文字,复制进 "+剪切板不就可以了?("+剪切板是系统剪切板,忘记了?)在VIM中,复制的指令是y(在非编辑模式下按y就可以了),那要将文本复制进指定的剪切板,只需要加上剪切板的编号就可以了。举个例子,我们希望把VIM中的一段文本复制下来,然后粘贴到浏览器的地址栏中:第一步,现把需要复制的文字选中(非编辑模式下),然后在键盘上依次按"+y这三个字符,OK!已经复制下来了,现在用:reg命令看看,是不是在"+剪切板中了? 好了,目前为止,您已经大致掌握了VIM剪切板的基本用法,当然,VIM剪切板的功能还很强大,本文也不能尽数道来,就请您继续发掘吧。
vi中多个文件相互之间的复制、粘贴功能简介!
发布: 2007-6-08 22:43 | 作者: seanhe | 来源: | 查看: 25次 | 进入软件测试论坛讨论
昨天有人提出此类问题,我特地加以编辑一下,请大家共享,可能写的不好!
大家在vi编辑中,常常遇到想把文件A里面的一行或多行,复制到B文件里面去
(可能很多人不知道怎么办),该怎么做了?
下面是几中方法:
1.如果你有多台机器,而且是联网的,你可以.netterm虚拟终端,telnet登陆主机对A文件进行修改、复制,然后打开B文件粘贴过去!
2.如果是单机,当然要用unix自带的编辑功能呢
先简单介绍一些vi编辑里的命令:
(A).yw 将当前字存入无名缓冲区,前面可加"x,表示存入名字为x的有名
缓冲区(x为a-z),也可加数字表示存入的字数,以后可用P或p命
令取出
yy 将当前行存入无名缓冲区,用法参看yw
(B).命令如下:a-Z 是缓冲区,也可移出数字1-9指定的删除缓冲区
利用命名缓冲区可很好地保存若干文本段,便于以后存取、移动或者重排。这些缓冲区用a到z字母命名!为了访问这些缓冲区中的一个,要使用双引号
例如:要把一行插入a缓冲区,可键入:
"ayy
为了把这个文本放回该文件中,键入"ap
(c).m做标志命令:
m 字母 用字母标记当前行,以后可用 '字母使光标移动到当前行,
(参看'命令)
列子:1。将a文件中的4行到b文件中
命令如下:"ay4+
:ex b (转到b文件中)
然后"ap
2. 将a中多行复制到b文件中
先在开始处做标志mk
然后在末尾用"ay'k (光标自动回到开始处,此时已经把你的内容放到缓冲区了)
其中a表示缓冲区a
然后用ex转义到你的文件B中,然后用"ap命令粘贴就行
3。如果你文件中有多次要复制粘贴的话,看下面:
a表示缓冲区a ,你还继续可以使用缓冲b吗
缓冲区有a-z和1-9这么多
缓冲区就好象windows下的煎切版一样,它有好多个,你可以把你想要的复制进去,然后粘贴,只不过你用"ay时候多换a就是了,如你要复制462行用"ay ,复制536行用"by
我编写的不好,恳请斑竹帮我修改和补充,谢谢
来自:http://hi.baidu.com/%B4%FA%CD%F2%BB%D4/blog/item/56d18ddf9eb3d4d58c102969.html
很多同志抱怨再linux发行版下的vim不支持set fileencoding 和 set encoding 这两个非常重要的命令(windows的版本默认是支持的),所以很郁闷。其实原因很简单,因为它需要编译vim是打开multibyte模块,vim的默认编译是没有enable这个模块的,所以只要重新编译vim
./configure –enable-multibyte
make
sudo make install
来处:http://rainx.cn/blog/archives/30
程序员永远的痛之字符编码的奥秘:
字 符编码相信是每个程序员的噩梦,只要是有中文的地方,总是会遇到各种编码的问题,并且这种问题还非常难缠,尤其在linux上,因为上面很多软件都是针对 英语国家开发的,是不会考虑其他语种编码问题。在遇到编码的无数大坑之后,我决定仔细研究下编码问题,因为这就像一道坎一直横在你面前,每次到这里你都会 跌到,每次爬起来之后,你都若无其事,这样的人被称作战士,真正的战士。可惜是个力量战士,做为新时代的智力战士,当然不能在那跌到然后又在这继续跌到。
文件的存储方式:
文件都有自己的存储格式,比如最常见的txt,cpp,h,c,xml ,png, rmvb各种格式,还有自定义格式。这些文件不论是什么格式,都是存储在计算机硬盘里的2进制格存储,对应不同文件格式,有不同的软件解析。这篇文章不谈 文件是如何存储的,只谈文件是如何解析的。
文本文件解析:
文本文件对应于人类可以阅读的文本,如何从2进制转换为文本文件呢?起初由于计算机在美国发明,自然大家考虑的是英语如何表示,英语字母总共26个,加 上特殊字符,128个字符,7位既一个byte即可表示出来。这个就是大家所熟知的ascill编码。对应关系很简单,一个字符对应一一个byte。
但很快发现,其他非英语国家的文字远远超过ascill码,这时候大家当然想统一字符编码,不同国家出了自己不同的编码方式,中国的gb2312就是自 己做出来的编码方式,这样下去每个国家都有自己的编码方式,来回转换太麻烦了。这时候出现了新的编码方式,unicode编码方式,想将编码统一,所以规 定了每个字符对应的unicode码。
1、很多文件都是ascii编码,如果用unicode 太浪费。
2、没有标志位说明该几个字节来解析为一个符号。
这时候拯救世界的utf出现了,utf是unicode的一种实现,只不过更聪明了。utf16是占用两字节,或者四字节,utf32是占用四字节。utf8是很聪明的一种表示方式。
1、对于单字节符号,字节第一位为0,后面7位表示字节编码。
2、对于n字节符号,第一字节的前n位都设为1,第n+1位为0,其余位为编码位置。
对于不同的编码,在文本的最前方有不同的标志,unicode 通常有两位来表示分别是ff fe, 或者feff, fffe表示big-endian 编码feff表示litte-endian编码。utf8是efbbbf来开头的。可以看出来utf-8是自解释的,所以不用带这个标志文件,大多数程序 是可以识别的。但有些程序不能识别这个标志,比如php就会直接把这个标志当文本解析,不会忽略。相信很多遇到php输出文本解析乱码或者解析错误的同学 都遇到这样的问题。
如何解决问题:
如果有vim那最好不过了,去掉命令:
set encoding=utf-8
set nobomb
添加命令:
set encoding=utf-8
set bomb
或者使用notepad++自带的功能
来自:
https://software.intel.com/zh-cn/blogs/2014/02/13/?utm_campaign=CSDN&utm_source=intel.csdn.net&utm_medium=Link&utm_content=others-bianma
./configure –enable-multibyte
make
sudo make install
来处:http://rainx.cn/blog/archives/30
程序员永远的痛之字符编码的奥秘:
字 符编码相信是每个程序员的噩梦,只要是有中文的地方,总是会遇到各种编码的问题,并且这种问题还非常难缠,尤其在linux上,因为上面很多软件都是针对 英语国家开发的,是不会考虑其他语种编码问题。在遇到编码的无数大坑之后,我决定仔细研究下编码问题,因为这就像一道坎一直横在你面前,每次到这里你都会 跌到,每次爬起来之后,你都若无其事,这样的人被称作战士,真正的战士。可惜是个力量战士,做为新时代的智力战士,当然不能在那跌到然后又在这继续跌到。
文件的存储方式:
文件都有自己的存储格式,比如最常见的txt,cpp,h,c,xml ,png, rmvb各种格式,还有自定义格式。这些文件不论是什么格式,都是存储在计算机硬盘里的2进制格存储,对应不同文件格式,有不同的软件解析。这篇文章不谈 文件是如何存储的,只谈文件是如何解析的。
文本文件解析:
文本文件对应于人类可以阅读的文本,如何从2进制转换为文本文件呢?起初由于计算机在美国发明,自然大家考虑的是英语如何表示,英语字母总共26个,加 上特殊字符,128个字符,7位既一个byte即可表示出来。这个就是大家所熟知的ascill编码。对应关系很简单,一个字符对应一一个byte。
但很快发现,其他非英语国家的文字远远超过ascill码,这时候大家当然想统一字符编码,不同国家出了自己不同的编码方式,中国的gb2312就是自 己做出来的编码方式,这样下去每个国家都有自己的编码方式,来回转换太麻烦了。这时候出现了新的编码方式,unicode编码方式,想将编码统一,所以规 定了每个字符对应的unicode码。
1、很多文件都是ascii编码,如果用unicode 太浪费。
2、没有标志位说明该几个字节来解析为一个符号。
这时候拯救世界的utf出现了,utf是unicode的一种实现,只不过更聪明了。utf16是占用两字节,或者四字节,utf32是占用四字节。utf8是很聪明的一种表示方式。
1、对于单字节符号,字节第一位为0,后面7位表示字节编码。
2、对于n字节符号,第一字节的前n位都设为1,第n+1位为0,其余位为编码位置。
对于不同的编码,在文本的最前方有不同的标志,unicode 通常有两位来表示分别是ff fe, 或者feff, fffe表示big-endian 编码feff表示litte-endian编码。utf8是efbbbf来开头的。可以看出来utf-8是自解释的,所以不用带这个标志文件,大多数程序 是可以识别的。但有些程序不能识别这个标志,比如php就会直接把这个标志当文本解析,不会忽略。相信很多遇到php输出文本解析乱码或者解析错误的同学 都遇到这样的问题。
如何解决问题:
如果有vim那最好不过了,去掉命令:
set encoding=utf-8
set nobomb
添加命令:
set encoding=utf-8
set bomb
或者使用notepad++自带的功能
来自:
https://software.intel.com/zh-cn/blogs/2014/02/13/?utm_campaign=CSDN&utm_source=intel.csdn.net&utm_medium=Link&utm_content=others-bianma
忍了一个月,终于有时间筛一遍firefox里面的插件,最后确认是All-in-One Gestures导致firefox错误控制台自动弹出,没完没了,闹心巴拉。
在“工具--附加组件--扩展”里找到后下载,done!
=======
通过逐一排除,已经知道是 FireGesture引起的。可是为什么会这样呢?
在“工具--附加组件--扩展”里找到后下载,done!
=======
通过逐一排除,已经知道是 FireGesture引起的。可是为什么会这样呢?
从SVN导出指定版本号之间修改的文件,某个人在某个版本之间修改的文件
Php/Js/Shell/Go jackxiang 2011-12-14 21:15
当一个网站项目进入运营维护阶段以后,不会再频繁地更新全部源文件到服务器,这个时间的修改大多是局部的,因此更新文件只需更新修改过的文件,其他没有修改过的文件就没有必要上载到服务器。但一个稍微上规模的网站项目,文件是很多的,而且对于团队协作开发更难知道每次修改到哪些文件,这时候SVN的作用发挥出来了。
主要优点:打开导出来的文件,文件夹层次是保留不变的,这样你可以打包上传服务器,然后解压覆盖。不用担心漏传文件,也不用担心会覆盖错文件。
阅读全文
主要优点:打开导出来的文件,文件夹层次是保留不变的,这样你可以打包上传服务器,然后解压覆盖。不用担心漏传文件,也不用担心会覆盖错文件。
阅读全文
数据库容量说明:
Access,单表十万级小型数据库
当单表复杂数据超过 6 万条时,查询速度明显下降
如果优化数据库和优化查询语句,承受能力(并发及速度)可达数十万,甚至超百万
MsSQL2000,单表百万级中型数据库,支持数据库集群
当单表复杂数据超过 50 万条时,查询速度明显下降
如果优化数据库和优化查询语句,承受能力(并发及速度)可达数百万,甚至超千万
MySQL,单表千万级大型数据库,支持数据库集群
SUN公司产品,开源,之所以称大型数据库,是因为在承受能力(并发及速度)方面的出色表现
MsSQL2005,单表千万级大型数据库,支持数据库集群
在2000的基础上,严格了数据库格式,承受能力(主要是速度方面)大跨步提升
MsSQL2008,单表千万级超大型数据库,支持数据库集群
在2005的基础上,严格了数据库格式,承受能力(主要是并发方面)大跨步提升
Oracle,单表千万级超大型数据库,支持数据库集群
甲骨文公司产品,在稳定性和并发方面的表现尤为突出,是当前数据库市场份额最多的一个,号称海量数据库。
另,还有 BD2(IBM公司产品,市场占有率第二),SyBase(SyBase公司产品,老牌数据库,在国内移动电信金融铁路行业使用非常广泛,但现在很多都转向Oracle怀抱),Teradata(沃尔玛等大型超市市场所用)等数据库,因没了解,无法比较。
全球数据库市场份额2008:
Oracle 40%左右,IBM22%左右,Ms20%左右,Teradata10%左右,SyBase10%左右
阅读全文
Access,单表十万级小型数据库
当单表复杂数据超过 6 万条时,查询速度明显下降
如果优化数据库和优化查询语句,承受能力(并发及速度)可达数十万,甚至超百万
MsSQL2000,单表百万级中型数据库,支持数据库集群
当单表复杂数据超过 50 万条时,查询速度明显下降
如果优化数据库和优化查询语句,承受能力(并发及速度)可达数百万,甚至超千万
MySQL,单表千万级大型数据库,支持数据库集群
SUN公司产品,开源,之所以称大型数据库,是因为在承受能力(并发及速度)方面的出色表现
MsSQL2005,单表千万级大型数据库,支持数据库集群
在2000的基础上,严格了数据库格式,承受能力(主要是速度方面)大跨步提升
MsSQL2008,单表千万级超大型数据库,支持数据库集群
在2005的基础上,严格了数据库格式,承受能力(主要是并发方面)大跨步提升
Oracle,单表千万级超大型数据库,支持数据库集群
甲骨文公司产品,在稳定性和并发方面的表现尤为突出,是当前数据库市场份额最多的一个,号称海量数据库。
另,还有 BD2(IBM公司产品,市场占有率第二),SyBase(SyBase公司产品,老牌数据库,在国内移动电信金融铁路行业使用非常广泛,但现在很多都转向Oracle怀抱),Teradata(沃尔玛等大型超市市场所用)等数据库,因没了解,无法比较。
全球数据库市场份额2008:
Oracle 40%左右,IBM22%左右,Ms20%左右,Teradata10%左右,SyBase10%左右
阅读全文
什么是CGI
CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。
CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等
什么是FastCGI
FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。
FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail- Over特性等等。
FastCGI与CGI特点
1、如CGI,FastCGI也具有语言无关性.
2、如CGI, FastCGI在进程中的应用程序,独立于核心web服务器运行,提供了一个比API更安全的环境。(APIs把应用程序的代码与核心的web服务器链接在一起,这意味着在一个错误的API的应用程序可能会损坏其他应用程序或核心服务器; 恶意的API的应用程序代码甚至可以窃取另一个应用程序或核心服务器的密钥。)
3、FastCGI技术目前支持语言有:C/C++、Java、Perl、Tcl、Python、SmallTalk、Ruby等。相关模块在Apache, ISS, Lighttpd等流行的服务器上也是可用的。
4、如CGI,FastCGI的不依赖于任何Web服务器的内部架构,因此即使服务器技术的变化, FastCGI依然稳定不变。
FastCGI的工作原理
1、Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)
2、FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。
3、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
4、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。
在上述情况中,你可以想象CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。
FastCGI的不足
因为是多进程,所以比CGI多线程消耗更多的服务器内存,PHP-CGI解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数。
Nginx 0.8.46+PHP 5.2.14(FastCGI)服务器在3万并发连接下,开启的10个Nginx进程消耗150M内存(15M*10=150M),开启的64个php-cgi进程消耗1280M内存(20M*64=1280M),加上系统自身消耗的内存,总共消耗不到2GB内存。如果服务器内存较小,完全可以只开启25个php-cgi进程,这样php-cgi消耗的总内存数才500M。
上面的数据摘自Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)
什么是PHP-CGI
PHP-CGI是PHP自带的FastCGI管理器。
启动PHP-CGI,使用如下命令:
?View Code BASH
1
php-cgi -b 127.0.0.1:9000
PHP-CGI的不足
1、php-cgi变更php.ini配置后需重启php-cgi才能让新的php-ini生效,不可以平滑重启
2、直接杀死php-cgi进程,php就不能运行了。(PHP-FPM和Spawn-FCGI就没有这个问题,守护进程会平滑从新生成新的子进程。)
什么是PHP-FPM
PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的,可以在 http://php-fpm.org/download下载得到.
PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。
现在我们可以在最新的PHP 5.3.2的源码树里下载得到直接整合了PHP-FPM的分支,据说下个版本会融合进PHP的主分支去。相对Spawn-FCGI,PHP-FPM在CPU和内存方面的控制都更胜一筹,而且前者很容易崩溃,必须用crontab进行监控,而PHP-FPM则没有这种烦恼。
PHP5.3.3已经集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多有点,所以被PHP官方收录了。在./configure的时候带 –enable-fpm参数即可开启PHP-FPM。
使用PHP-FPM来控制PHP-CGI的FastCGI进程
?View Code BASH
1
2
3
4
5
6
7
8
/usr/local/php/sbin/php-fpm{start|stop|quit|restart|reload|logrotate}
--start 启动php的fastcgi进程
--stop 强制终止php的fastcgi进程
--quit 平滑终止php的fastcgi进程
--restart 重启php的fastcgi进程
--reload 重新平滑加载php的php.ini
--logrotate 重新启用log文件
什么是Spawn-FCGI
Spawn-FCGI是一个通用的FastCGI管理服务器,它是lighttpd中的一部份,很多人都用Lighttpd的Spawn-FCGI进行FastCGI模式下的管理工作,不过有不少缺点。而PHP-FPM的出现多少缓解了一些问题,但PHP-FPM有个缺点就是要重新编译,这对于一些已经运行的环境可能有不小的风险(refer),在php 5.3.3中可以直接使用PHP-FPM了。
Spawn-FCGI目前已经独成为一个项目,更加稳定一些,也给很多Web 站点的配置带来便利。已经有不少站点将它与nginx搭配来解决动态网页。
最新的lighttpd也没有包含这一块了(http://www.lighttpd.net/search?q=Spawn-FCGI),但可以在以前版本中找到它。在lighttpd-1.4.15版本中就包含了(http://www.lighttpd.net/download/lighttpd-1.4.15.tar.gz)
目前Spawn-FCGI的下载地址是http://redmine.lighttpd.net/projects/spawn-fcgi,最新版本是http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz
注:最新的Spawn-FCGI可以到lighttpd.net网站搜索“Spawn-FCGI”找到它的最新版本发布地址
下面我们就可以使用Spawn-FCGI来控制php-CGI的FastCGI进程了
?View Code BASH
1
/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u www-data -g www-data -f /usr/bin/php-CGI
参数含义如下:
-f 指定调用FastCGI的进程的执行程序位置,根据系统上所装的PHP的情况具体设置
-a 绑定到地址addr
-p 绑定到端口port
-s 绑定到unix socket的路径path
-C 指定产生的FastCGI的进程数,默认为5(仅用于PHP)
-P 指定产生的进程的PID文件路径
-u和-g FastCGI使用什么身份(-u 用户 -g 用户组)运行,Ubuntu下可以使用www-data,其他的根据情况配置,如nobody、apache等
PHP-FPM与spawn-CGI对比测试
PHP-FPM的使用非常方便,配置都是在PHP-FPM.ini的文件内,而启动、重启都可以从php/sbin/PHP-FPM中进行。更方便的是修改php.ini后可以直接使用PHP-FPM reload进行加载,无需杀掉进程就可以完成php.ini的修改加载
结果显示使用PHP-FPM可以使php有不小的性能提升。PHP-FPM控制的进程cpu回收的速度比较慢,内存分配的很均匀。
Spawn-FCGI控制的进程CPU下降的很快,而内存分配的比较不均匀。有很多进程似乎未分配到,而另外一些却占用很高。可能是由于进程任务分配的不均匀导致的.而这也导致了总体响应速度的下降。而PHP-FPM合理的分配,导致总体响应的提到以及任务的平均。
PHP-FPM与Spawn-FCGI功能比较
http://php-fpm.org/about/
PHP-FPM、Spawn-FCGI都是守护php-cgi的进程管理器。
参考文档:
http://topic.csdn.net/u/20100216/22/5809e272-6f67-4248-bde9-99deeae5215b.html
http://topic.csdn.net/u/20101015/19/8ae74452-ec6b-448e-9942-21faeb008cd7.html
http://club.topsage.com/thread-768488-1-1.html
http://www.unixaid.info/index.php/productsapp/23-servsf/842-spawn-fcgi
http://www.fastcgi.com/drupal/node/2
http://baike.baidu.com/view/641394.htm
http://baike.baidu.com/view/32614.htm
http://blog.yation.com/network/fastcgi/
CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。
CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等
什么是FastCGI
FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。
FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail- Over特性等等。
FastCGI与CGI特点
1、如CGI,FastCGI也具有语言无关性.
2、如CGI, FastCGI在进程中的应用程序,独立于核心web服务器运行,提供了一个比API更安全的环境。(APIs把应用程序的代码与核心的web服务器链接在一起,这意味着在一个错误的API的应用程序可能会损坏其他应用程序或核心服务器; 恶意的API的应用程序代码甚至可以窃取另一个应用程序或核心服务器的密钥。)
3、FastCGI技术目前支持语言有:C/C++、Java、Perl、Tcl、Python、SmallTalk、Ruby等。相关模块在Apache, ISS, Lighttpd等流行的服务器上也是可用的。
4、如CGI,FastCGI的不依赖于任何Web服务器的内部架构,因此即使服务器技术的变化, FastCGI依然稳定不变。
FastCGI的工作原理
1、Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)
2、FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。
3、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
4、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。
在上述情况中,你可以想象CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。
FastCGI的不足
因为是多进程,所以比CGI多线程消耗更多的服务器内存,PHP-CGI解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数。
Nginx 0.8.46+PHP 5.2.14(FastCGI)服务器在3万并发连接下,开启的10个Nginx进程消耗150M内存(15M*10=150M),开启的64个php-cgi进程消耗1280M内存(20M*64=1280M),加上系统自身消耗的内存,总共消耗不到2GB内存。如果服务器内存较小,完全可以只开启25个php-cgi进程,这样php-cgi消耗的总内存数才500M。
上面的数据摘自Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)
什么是PHP-CGI
PHP-CGI是PHP自带的FastCGI管理器。
启动PHP-CGI,使用如下命令:
?View Code BASH
1
php-cgi -b 127.0.0.1:9000
PHP-CGI的不足
1、php-cgi变更php.ini配置后需重启php-cgi才能让新的php-ini生效,不可以平滑重启
2、直接杀死php-cgi进程,php就不能运行了。(PHP-FPM和Spawn-FCGI就没有这个问题,守护进程会平滑从新生成新的子进程。)
什么是PHP-FPM
PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的,可以在 http://php-fpm.org/download下载得到.
PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。
现在我们可以在最新的PHP 5.3.2的源码树里下载得到直接整合了PHP-FPM的分支,据说下个版本会融合进PHP的主分支去。相对Spawn-FCGI,PHP-FPM在CPU和内存方面的控制都更胜一筹,而且前者很容易崩溃,必须用crontab进行监控,而PHP-FPM则没有这种烦恼。
PHP5.3.3已经集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多有点,所以被PHP官方收录了。在./configure的时候带 –enable-fpm参数即可开启PHP-FPM。
使用PHP-FPM来控制PHP-CGI的FastCGI进程
?View Code BASH
1
2
3
4
5
6
7
8
/usr/local/php/sbin/php-fpm{start|stop|quit|restart|reload|logrotate}
--start 启动php的fastcgi进程
--stop 强制终止php的fastcgi进程
--quit 平滑终止php的fastcgi进程
--restart 重启php的fastcgi进程
--reload 重新平滑加载php的php.ini
--logrotate 重新启用log文件
什么是Spawn-FCGI
Spawn-FCGI是一个通用的FastCGI管理服务器,它是lighttpd中的一部份,很多人都用Lighttpd的Spawn-FCGI进行FastCGI模式下的管理工作,不过有不少缺点。而PHP-FPM的出现多少缓解了一些问题,但PHP-FPM有个缺点就是要重新编译,这对于一些已经运行的环境可能有不小的风险(refer),在php 5.3.3中可以直接使用PHP-FPM了。
Spawn-FCGI目前已经独成为一个项目,更加稳定一些,也给很多Web 站点的配置带来便利。已经有不少站点将它与nginx搭配来解决动态网页。
最新的lighttpd也没有包含这一块了(http://www.lighttpd.net/search?q=Spawn-FCGI),但可以在以前版本中找到它。在lighttpd-1.4.15版本中就包含了(http://www.lighttpd.net/download/lighttpd-1.4.15.tar.gz)
目前Spawn-FCGI的下载地址是http://redmine.lighttpd.net/projects/spawn-fcgi,最新版本是http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz
注:最新的Spawn-FCGI可以到lighttpd.net网站搜索“Spawn-FCGI”找到它的最新版本发布地址
下面我们就可以使用Spawn-FCGI来控制php-CGI的FastCGI进程了
?View Code BASH
1
/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u www-data -g www-data -f /usr/bin/php-CGI
参数含义如下:
-f 指定调用FastCGI的进程的执行程序位置,根据系统上所装的PHP的情况具体设置
-a 绑定到地址addr
-p 绑定到端口port
-s 绑定到unix socket的路径path
-C 指定产生的FastCGI的进程数,默认为5(仅用于PHP)
-P 指定产生的进程的PID文件路径
-u和-g FastCGI使用什么身份(-u 用户 -g 用户组)运行,Ubuntu下可以使用www-data,其他的根据情况配置,如nobody、apache等
PHP-FPM与spawn-CGI对比测试
PHP-FPM的使用非常方便,配置都是在PHP-FPM.ini的文件内,而启动、重启都可以从php/sbin/PHP-FPM中进行。更方便的是修改php.ini后可以直接使用PHP-FPM reload进行加载,无需杀掉进程就可以完成php.ini的修改加载
结果显示使用PHP-FPM可以使php有不小的性能提升。PHP-FPM控制的进程cpu回收的速度比较慢,内存分配的很均匀。
Spawn-FCGI控制的进程CPU下降的很快,而内存分配的比较不均匀。有很多进程似乎未分配到,而另外一些却占用很高。可能是由于进程任务分配的不均匀导致的.而这也导致了总体响应速度的下降。而PHP-FPM合理的分配,导致总体响应的提到以及任务的平均。
PHP-FPM与Spawn-FCGI功能比较
http://php-fpm.org/about/
PHP-FPM、Spawn-FCGI都是守护php-cgi的进程管理器。
参考文档:
http://topic.csdn.net/u/20100216/22/5809e272-6f67-4248-bde9-99deeae5215b.html
http://topic.csdn.net/u/20101015/19/8ae74452-ec6b-448e-9942-21faeb008cd7.html
http://club.topsage.com/thread-768488-1-1.html
http://www.unixaid.info/index.php/productsapp/23-servsf/842-spawn-fcgi
http://www.fastcgi.com/drupal/node/2
http://baike.baidu.com/view/641394.htm
http://baike.baidu.com/view/32614.htm
http://blog.yation.com/network/fastcgi/
我的4核心开8个进程:
[root@jackxiang conf]# ps aux|grep nginx
root 30054 0.1 0.0 308184 1740 ? Ss 20:44 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
www 30060 3.6 0.3 329396 23208 ? S 20:44 0:00 nginx: worker process
www 30062 3.5 0.3 329396 23208 ? S 20:44 0:00 nginx: worker process
www 30063 4.1 0.3 329396 23208 ? S 20:44 0:00 nginx: worker process
www 30064 3.8 0.3 329396 23208 ? S 20:44 0:00 nginx: worker process
www 30065 3.8 0.3 329396 23208 ? S 20:44 0:00 nginx: worker process
www 30066 3.5 0.3 329396 23208 ? S 20:44 0:00 nginx: worker process
www 30067 4.6 0.4 329396 24180 ? S 20:44 0:00 nginx: worker process
www 30068 4.1 0.3 329396 23208 ? S 20:44 0:00 nginx: worker process
2核是 01,四核是0001,8核是00000001,有多少个核,就有几位数,1表示该内核开启,0表示该内核关闭。
worker_processes最多开启8个,8个以上性能提升不会再提升了,而且稳定性变得更低,所以8个进程够用了。
——————————————————————————————————————————————————————————————————————————
我的双核cpu开两个进程,为
worker_processes 2;
worker_cpu_affinity 01 10;
若要2核CPU开4进程,那么可以写为:
worker_processes 4;
worker_cpu_affinity 01 10 01 10;
——————————————————————————————————————————————————————————————————————————
Nginx默认没有开启利用多核CPU,我们可以通过增加worker_cpu_affinity配置参数来充分利用多核CPU。CPU是任务处理,计算最关键的资源,CPU核越多,性能就越好。阅读全文
[root@jackxiang conf]# ps aux|grep nginx
root 30054 0.1 0.0 308184 1740 ? Ss 20:44 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
www 30060 3.6 0.3 329396 23208 ? S 20:44 0:00 nginx: worker process
www 30062 3.5 0.3 329396 23208 ? S 20:44 0:00 nginx: worker process
www 30063 4.1 0.3 329396 23208 ? S 20:44 0:00 nginx: worker process
www 30064 3.8 0.3 329396 23208 ? S 20:44 0:00 nginx: worker process
www 30065 3.8 0.3 329396 23208 ? S 20:44 0:00 nginx: worker process
www 30066 3.5 0.3 329396 23208 ? S 20:44 0:00 nginx: worker process
www 30067 4.6 0.4 329396 24180 ? S 20:44 0:00 nginx: worker process
www 30068 4.1 0.3 329396 23208 ? S 20:44 0:00 nginx: worker process
2核是 01,四核是0001,8核是00000001,有多少个核,就有几位数,1表示该内核开启,0表示该内核关闭。
worker_processes最多开启8个,8个以上性能提升不会再提升了,而且稳定性变得更低,所以8个进程够用了。
——————————————————————————————————————————————————————————————————————————
我的双核cpu开两个进程,为
worker_processes 2;
worker_cpu_affinity 01 10;
若要2核CPU开4进程,那么可以写为:
worker_processes 4;
worker_cpu_affinity 01 10 01 10;
——————————————————————————————————————————————————————————————————————————
Nginx默认没有开启利用多核CPU,我们可以通过增加worker_cpu_affinity配置参数来充分利用多核CPU。CPU是任务处理,计算最关键的资源,CPU核越多,性能就越好。阅读全文
看到访问来源中很多都是搜索的数据结构程序,于是乎知道又一批孩子充分利用了搜索引擎为一年一度的课程设计奋斗着,如果各位学弟学妹有幸看到这段话的话,我奉劝大家还是自己多写写程序吧,抄来的终究不是自己的,现在下点功夫会受益终生的。
下面是和题目有关的内容。
css中"点"与"井号"的含义
#对应id
.对应class
不加对应html标签
Class与ID的区别
一个Class是用来根据用户定义的标准对一个或多个元素进行定义的。打个比较恰当的比方就是剧本:一个Class可以定义剧本中每个人物的故事线,你可以通过CSS,Javascript等来使用这个类。因此你可以在一个页面上使用 class="Frodo" ,class="Gandalf",class="Aragorn"来区分不同的故事线。
还有一点非常重要的是你可以在一个文档中使用任意次数的 Class。
至于ID,通常用于定义页面上一个仅出现一次的标记。在对页面排版进行结构化布局时(比如说通常一个页面都是由 一个页眉,一个报头,一个内容区域和一个页脚等组成),一般使用ID比较理想,因为一个ID在一个文档中只能被使用一次。而这些元素在同一页面中很少会出 现大于一次的情况。
归纳成一句话就是:Class可以反复使用而ID在一个页面中仅能被使用一次。有可能在很大部分浏览器中反复使用同一个ID不会出现问题,但在标准上这绝对是错误的使用,而且很可能导致某些浏览器的现实问题。
在实际应用的时候,Class可能对文字的排版等比较有用,而ID则对宏观布局和设计放置各种元素较有用。
如:
最后,你也可以为一个指定的HTML元素应用选择符,把HTML选择符放置在前面就可以了,所以, p.jam { whatever }会应用在有类“jam”的段落上。
下面是和题目有关的内容。
css中"点"与"井号"的含义
#对应id
.对应class
不加对应html标签
Class与ID的区别
一个Class是用来根据用户定义的标准对一个或多个元素进行定义的。打个比较恰当的比方就是剧本:一个Class可以定义剧本中每个人物的故事线,你可以通过CSS,Javascript等来使用这个类。因此你可以在一个页面上使用 class="Frodo" ,class="Gandalf",class="Aragorn"来区分不同的故事线。
还有一点非常重要的是你可以在一个文档中使用任意次数的 Class。
至于ID,通常用于定义页面上一个仅出现一次的标记。在对页面排版进行结构化布局时(比如说通常一个页面都是由 一个页眉,一个报头,一个内容区域和一个页脚等组成),一般使用ID比较理想,因为一个ID在一个文档中只能被使用一次。而这些元素在同一页面中很少会出 现大于一次的情况。
归纳成一句话就是:Class可以反复使用而ID在一个页面中仅能被使用一次。有可能在很大部分浏览器中反复使用同一个ID不会出现问题,但在标准上这绝对是错误的使用,而且很可能导致某些浏览器的现实问题。
在实际应用的时候,Class可能对文字的排版等比较有用,而ID则对宏观布局和设计放置各种元素较有用。
如:
最后,你也可以为一个指定的HTML元素应用选择符,把HTML选择符放置在前面就可以了,所以, p.jam { whatever }会应用在有类“jam”的段落上。
[个人原创]php msg_get_queue创造或附在一个消息队列上,进行简单的队列分发。
Php/Js/Shell/Go jackxiang 2011-12-4 12:06
Jack's Note:
共享内存再顺带提一下消息队列Message Queue(也是在System V IPC函数组中),消息队列似乎可以视为另一种共享内存,只是数据存储的方式有些不同。简单来说,就是每个key对应一个队列,每个队列可以保存多个数据,数据间按照先进先出的原则进行操作。
这个简单的方式,健壮性超过大多的 免费MQ server,限制是只能在Unix下用
Linux编译php时option加上--enable-sysvmsg
PHP编译Configure如下:
出现编译问题如下:
php在make过程中出现“usr bin ld cannot find lltdl”错误,详细错误如下:
/usr/bin/ld: cannot find -lltdl
collect2: ld returned 1 exit status
make: *** [libphp5.la] Error 1
在Google上搜了好久,终于找到答案,原来是在编辑php时添加的“–with-mcrypt”选项造成[上面的编译暂时去掉了–with-mcrypt就Ok了]。所以“usr bin ld cannot find lltdl”错误解决办法如下:
1、如果不需要mcrypt,那么编辑php时去掉该选项,然后再make、make install。
2、如果需要mcrypt,那么需要安装libltdl
libltdl在libmcrypt软件包中就有,具体过程:
经过测试,果然去掉“–with-mcrypt”选项编译通过。
send.php
Receive.php
共享内存再顺带提一下消息队列Message Queue(也是在System V IPC函数组中),消息队列似乎可以视为另一种共享内存,只是数据存储的方式有些不同。简单来说,就是每个key对应一个队列,每个队列可以保存多个数据,数据间按照先进先出的原则进行操作。
这个简单的方式,健壮性超过大多的 免费MQ server,限制是只能在Unix下用
Linux编译php时option加上--enable-sysvmsg
PHP编译Configure如下:
出现编译问题如下:
php在make过程中出现“usr bin ld cannot find lltdl”错误,详细错误如下:
/usr/bin/ld: cannot find -lltdl
collect2: ld returned 1 exit status
make: *** [libphp5.la] Error 1
在Google上搜了好久,终于找到答案,原来是在编辑php时添加的“–with-mcrypt”选项造成[上面的编译暂时去掉了–with-mcrypt就Ok了]。所以“usr bin ld cannot find lltdl”错误解决办法如下:
1、如果不需要mcrypt,那么编辑php时去掉该选项,然后再make、make install。
2、如果需要mcrypt,那么需要安装libltdl
libltdl在libmcrypt软件包中就有,具体过程:
经过测试,果然去掉“–with-mcrypt”选项编译通过。
send.php
Receive.php
周末去海岸城买东东,发现有一台海尔的一体机产品,预装的操作系统是linux(即时linux,thizlinux),不知道用户名和密码无法进入系统,咨询卖电脑的,也不知道。
用了很多linux发行版,我以前还没有用过即时linux(英文名:thizlinux),记住它的官方网站:http://www.thizlinux.com/ 。
电脑右下角还有一个360的标,我问了下,听说都是安在电脑的芯片里了,想恢复就成,不用也成,这既然是360,何必用Linux?这是一个疑问,也就是让用户安Windows吧?呵呵。
用了很多linux发行版,我以前还没有用过即时linux(英文名:thizlinux),记住它的官方网站:http://www.thizlinux.com/ 。
电脑右下角还有一个360的标,我问了下,听说都是安在电脑的芯片里了,想恢复就成,不用也成,这既然是360,何必用Linux?这是一个疑问,也就是让用户安Windows吧?呵呵。
“武功者,包括内功、外功、武术技击术之总和。有形的动作,如支撑格拒,姿式回环,变化万千,外部可见,授受较易,晨操夕练,不难熟练。而无形的内功指内部之灵惠素质,即识、胆、气、劲、神是也,此乃与学练者整个内在世界的学识水平密切相关,是先天之慧根悟性与后天智能的总成,必需寻得秘籍方可炼成。”
——摘自《武林秘籍大全》
其实上面谈到的也就是九阴真经中的虚实罢了,摘录如下:
天之道,损有余而补不足,是故虚胜实,不足胜有余。其意博,其理奥,其趣深,天地之象分,阴阳之候列,变化之由表,死生之兆彰,不谋而遗迹自同,勿约而幽明斯契,稽其言有微,验之事不忒,诚可谓至道之宗,奉生之始矣。假若天机迅发,妙识玄通,成谋虽属乎生知,标格亦资于治训,未尝有行不由送,出不由产者亦。然刻意研精,探微索隐,或识契真要,则目牛无全,故动则有成,犹鬼神幽赞,而命世奇杰,时时间出焉。
——摘自《九阴真经》
阅读全文
——摘自《武林秘籍大全》
其实上面谈到的也就是九阴真经中的虚实罢了,摘录如下:
天之道,损有余而补不足,是故虚胜实,不足胜有余。其意博,其理奥,其趣深,天地之象分,阴阳之候列,变化之由表,死生之兆彰,不谋而遗迹自同,勿约而幽明斯契,稽其言有微,验之事不忒,诚可谓至道之宗,奉生之始矣。假若天机迅发,妙识玄通,成谋虽属乎生知,标格亦资于治训,未尝有行不由送,出不由产者亦。然刻意研精,探微索隐,或识契真要,则目牛无全,故动则有成,犹鬼神幽赞,而命世奇杰,时时间出焉。
——摘自《九阴真经》
阅读全文
[个人原创]在Centos6.0机器上安装PHP的 libevent PECL Package 扩展步骤及实例,以及实现多个USB转串口的读写实践成功 ,可以用select函数。
Php/Js/Shell/Go jackxiang 2011-11-19 12:40
yum install libevent-dev 安装libevent
yum install libevent
PHP Extention: http://pecl.php.net/package/libevent/0.0.5
再就是:自己编译 http://libevent.org/
缘起:PHP5的先进之处在于,你可以用stream_select()处理几乎所有的stream-例如你可以通过include STDIN用它接收键盘输入并保存进数组,你还可以接收通过proc_open()打开的管道中的数据。
目的:想用这个函数进行对文件句柄进行监控,其并不是想用于网络的socket句柄,为此做了如下试验:
探索:能否用PHP的stream_select的方式对CentOs下的串口进行监控呢?经过一系列的研究,发现是可以进行多串口的监控的。
研究: 发现会报错,stream_select(): cannot represent a stream of type dio as a select()
解决: 最后,见代码吧。代码下载:
如果,你想时间更短一点,E文是这样说的:
If you want to set an absolute maximum execution time for stream_select in a loop, it's important to decrement the max_time value passed to stream_select.修改了一下的情况,好像效果不明显,呵呵:
完善的第三个版本备案下载,这个实现了对多个串口的同时读写。By:jack
其实主要是对这个超时机制的理解。见下面这段代码的超时:
插曲:dio.raw://[device]
for raw streams anddio.serial://[devicefor serials streams. 这两种stream有什么区别啊?用serial不行,而用raw就Ok了。但是会出现上面的报错:stream_select(): cannot represent a stream of type dio as a select()
php有个libevent扩展,我觉得这个扩展应该可以有更广泛的用途,比如:
(1)异步的服务器端开发框架.
(2)类似unix下的tail命令行.
(3)用php和ZeroMQ实现的一个事件驱动服务器端
http://blog.sina.com.cn/s/blog_60b9ee7f0100qdmh.html
搞录:
问题:
有没有办法在php中实现多线程呢?
假设你正在写一个基于多台服务器的php应用,理想的情况时同时向多台服务器发送请求,而不是一台接一台。
可以实现吗?
回答:
当有人想要实现并发功能时,他们通常会想到用fork或者spawn threads,但是当他们发现php不支持多线程的时候,大概会转换思路去用一些不够好的语言,比如perl。
其实的是大多数情况下,你大可不必使用fork或者线程,并且你会得到比用fork或thread更好的性能。
。。。
PHP5的先进之处在于,你可以用stream_select()处理几乎所有的stream-例如你可以通过include STDIN用它接收键盘输入并保存进数组,你还可以接收通过proc_open()打开的管道中的数据。
日常生活中:
如对多个URL进行异步访问,那个curl_multi一族函数的函数是循环,而用这个就是真正调用类似Linux下的select函数:
实践安装步骤如下:
wget http://pecl.php.net/get/libevent-0.0.4.tgz
checking for libevent support... yes, shared
checking for libevent headers in default path... not found
configure: error: Cannot find libevent headers
root@192.168.1.108:~/software/libevent-0.0.4# yum -y install libevent-devel libevent
不安libevent-devel会在具体安php的libevent扩展时出现找不到.h文件,用指定路径也成也就是下面的:
最好还是安上吧,但要是版本低于1.4还是指定的好,可能会出现问题,这样:
在安php的libevent扩展时加上 -with-libevent=/usr/local/webserver/libevent/:
./configure -with-libevent=/usr/local/webserver/libevent/
---
原因是如下的包没有安装
libevent-devel
把此包安装上去就好了
yum -y install libevent-devel
root@116.255.139.240:~/software# rpm -qa|grep libevent
libevent-1.4.13-1
root@116.255.139.240:~/software# rpm -ql libevent-1.4.13-1
/usr/lib/libevent-1.4.so.2
/usr/lib/libevent-1.4.so.2.1.3
/usr/lib/libevent_core-1.4.so.2
/usr/lib/libevent_core-1.4.so.2.1.3
/usr/lib/libevent_extra-1.4.so.2
/usr/lib/libevent_extra-1.4.so.2.1.3
/usr/share/doc/libevent-1.4.13
/usr/share/doc/libevent-1.4.13/README
libevent的官网:http://libevent.org/
wget https://github.com/downloads/libevent/libevent/libevent-2.0.16-stable.tar.gz
yum -y install libevent-devel 主要是防止编译PHP扩展Configure时出现找不到.h文件,有了它就不用指明:-with-libevent=/usr/local/webserver/libevent/
./configure prefix=/usr/local/webserver/libevent/
扩展安装:http://pecl.php.net/package/libevent
wget http://pecl.php.net/get/libevent-0.0.4.tgz
/usr/local/webserver/php/bin/phpize
./configure -with-libevent=/usr/local/webserver/libevent/
自己安或者yum,注意:yum安可能会出现问题:由於 PHP libevent 需要搭配C 的 libevent 1.4 以上版本 , 所以並非每個 Linux 套件都有 , 例如我的 CentOS 的 libevent 版本就比較舊 , 因此要自行編譯 , 以下就說明 CentOS 5.4 下成功編譯 PHP libevent 的步驟,PHP Warning: stream_select(): supplied argument is not a valid stream resource .
root@192.168.1.108:~/software/libevent-0.0.4# ./configure -with-libevent=/usr/local/webserver/libevent/
root@192.168.1.108:~/software/libevent-0.0.4# make;make install
......
........
Build complete.
Don't forget to run 'make test'.
Installing shared extensions: /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/
安装完毕,如下:
/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/libevent.so
DownLoad 测试源码,来自网上:
代码示例,来自网上,注释部分代码,测试读部分是ok的,如下:
网上其他的步骤,主要是注意不有yum默认的安装方法【由於 PHP libevent 需要搭配C 的 libevent 1.4 以上版本 , 所以並非每個 Linux 套件都有 , 例如我的 CentOS 的 libevent 版本就比較舊 , 因此要自行編譯 , 以下就說明 CentOS 5.4 下成功編譯 PHP libevent 的步驟】:
1. 編譯 libevent
解開 libevent source code , 進入 source code 目錄
執行 ./configure –prefix=/usr/local
執行 make
執行 make install
2. 編譯 PHP libevent
解開 PHP libevent source code , 進入 source code 目錄
執行 phpize
執行 ./configure –with-libevent=/usr/local
執行 make
執行 make install
這樣會把 libevent.so 安裝到 /usr/lib/php/modoules 或 /usr/lib64/php/modules , 看 os 是 32bit 或 64bit
同时呢,也可以参考下这个URL:http://www.ooso.net/archives/607
附录,关于curl_multi一族函数的问题:
阅读全文
yum install libevent
PHP Extention: http://pecl.php.net/package/libevent/0.0.5
再就是:自己编译 http://libevent.org/
缘起:PHP5的先进之处在于,你可以用stream_select()处理几乎所有的stream-例如你可以通过include STDIN用它接收键盘输入并保存进数组,你还可以接收通过proc_open()打开的管道中的数据。
目的:想用这个函数进行对文件句柄进行监控,其并不是想用于网络的socket句柄,为此做了如下试验:
探索:能否用PHP的stream_select的方式对CentOs下的串口进行监控呢?经过一系列的研究,发现是可以进行多串口的监控的。
研究: 发现会报错,stream_select(): cannot represent a stream of type dio as a select()
解决: 最后,见代码吧。代码下载:
下载文件
如果,你想时间更短一点,E文是这样说的:
If you want to set an absolute maximum execution time for stream_select in a loop, it's important to decrement the max_time value passed to stream_select.修改了一下的情况,好像效果不明显,呵呵:
下载文件
完善的第三个版本备案下载,这个实现了对多个串口的同时读写。By:jack
下载文件
插曲:dio.raw://[device]
for raw streams anddio.serial://[devicefor serials streams. 这两种stream有什么区别啊?用serial不行,而用raw就Ok了。但是会出现上面的报错:stream_select(): cannot represent a stream of type dio as a select()
php有个libevent扩展,我觉得这个扩展应该可以有更广泛的用途,比如:
(1)异步的服务器端开发框架.
(2)类似unix下的tail命令行.
(3)用php和ZeroMQ实现的一个事件驱动服务器端
http://blog.sina.com.cn/s/blog_60b9ee7f0100qdmh.html
搞录:
问题:
有没有办法在php中实现多线程呢?
假设你正在写一个基于多台服务器的php应用,理想的情况时同时向多台服务器发送请求,而不是一台接一台。
可以实现吗?
回答:
当有人想要实现并发功能时,他们通常会想到用fork或者spawn threads,但是当他们发现php不支持多线程的时候,大概会转换思路去用一些不够好的语言,比如perl。
其实的是大多数情况下,你大可不必使用fork或者线程,并且你会得到比用fork或thread更好的性能。
。。。
PHP5的先进之处在于,你可以用stream_select()处理几乎所有的stream-例如你可以通过include STDIN用它接收键盘输入并保存进数组,你还可以接收通过proc_open()打开的管道中的数据。
日常生活中:
如对多个URL进行异步访问,那个curl_multi一族函数的函数是循环,而用这个就是真正调用类似Linux下的select函数:
实践安装步骤如下:
wget http://pecl.php.net/get/libevent-0.0.4.tgz
checking for libevent support... yes, shared
checking for libevent headers in default path... not found
configure: error: Cannot find libevent headers
root@192.168.1.108:~/software/libevent-0.0.4# yum -y install libevent-devel libevent
不安libevent-devel会在具体安php的libevent扩展时出现找不到.h文件,用指定路径也成也就是下面的:
最好还是安上吧,但要是版本低于1.4还是指定的好,可能会出现问题,这样:
在安php的libevent扩展时加上 -with-libevent=/usr/local/webserver/libevent/:
./configure -with-libevent=/usr/local/webserver/libevent/
---
原因是如下的包没有安装
libevent-devel
把此包安装上去就好了
yum -y install libevent-devel
root@116.255.139.240:~/software# rpm -qa|grep libevent
libevent-1.4.13-1
root@116.255.139.240:~/software# rpm -ql libevent-1.4.13-1
/usr/lib/libevent-1.4.so.2
/usr/lib/libevent-1.4.so.2.1.3
/usr/lib/libevent_core-1.4.so.2
/usr/lib/libevent_core-1.4.so.2.1.3
/usr/lib/libevent_extra-1.4.so.2
/usr/lib/libevent_extra-1.4.so.2.1.3
/usr/share/doc/libevent-1.4.13
/usr/share/doc/libevent-1.4.13/README
libevent的官网:http://libevent.org/
wget https://github.com/downloads/libevent/libevent/libevent-2.0.16-stable.tar.gz
yum -y install libevent-devel 主要是防止编译PHP扩展Configure时出现找不到.h文件,有了它就不用指明:-with-libevent=/usr/local/webserver/libevent/
./configure prefix=/usr/local/webserver/libevent/
扩展安装:http://pecl.php.net/package/libevent
wget http://pecl.php.net/get/libevent-0.0.4.tgz
/usr/local/webserver/php/bin/phpize
./configure -with-libevent=/usr/local/webserver/libevent/
自己安或者yum,注意:yum安可能会出现问题:由於 PHP libevent 需要搭配C 的 libevent 1.4 以上版本 , 所以並非每個 Linux 套件都有 , 例如我的 CentOS 的 libevent 版本就比較舊 , 因此要自行編譯 , 以下就說明 CentOS 5.4 下成功編譯 PHP libevent 的步驟,PHP Warning: stream_select(): supplied argument is not a valid stream resource .
root@192.168.1.108:~/software/libevent-0.0.4# ./configure -with-libevent=/usr/local/webserver/libevent/
root@192.168.1.108:~/software/libevent-0.0.4# make;make install
......
........
Build complete.
Don't forget to run 'make test'.
Installing shared extensions: /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/
安装完毕,如下:
/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/libevent.so
DownLoad 测试源码,来自网上:
下载文件
代码示例,来自网上,注释部分代码,测试读部分是ok的,如下:
网上其他的步骤,主要是注意不有yum默认的安装方法【由於 PHP libevent 需要搭配C 的 libevent 1.4 以上版本 , 所以並非每個 Linux 套件都有 , 例如我的 CentOS 的 libevent 版本就比較舊 , 因此要自行編譯 , 以下就說明 CentOS 5.4 下成功編譯 PHP libevent 的步驟】:
1. 編譯 libevent
解開 libevent source code , 進入 source code 目錄
執行 ./configure –prefix=/usr/local
執行 make
執行 make install
2. 編譯 PHP libevent
解開 PHP libevent source code , 進入 source code 目錄
執行 phpize
執行 ./configure –with-libevent=/usr/local
執行 make
執行 make install
這樣會把 libevent.so 安裝到 /usr/lib/php/modoules 或 /usr/lib64/php/modules , 看 os 是 32bit 或 64bit
同时呢,也可以参考下这个URL:http://www.ooso.net/archives/607
附录,关于curl_multi一族函数的问题:
阅读全文
每一个程序员都有改变世界的梦想,他们不甘平凡,他们想要与众不同,他们想要创立世界上最酷的公司,那具体该如何做呢?风靡全球的《Rework》将告诉你答案。
37signals是一家很特别的公司,他们有很独特的理念。虽然他们的团队只有16人,但他们的几个产品每年都会带来相当可观的利润。他们反对风险投资,反对扩大规模,反对堆砌功能。如果让我用一个词形容他们的话,那就是maverick,在某种程度上他们与乔布斯有相似之处。除了他们的产品外,他们还有一些byproduct: 一个很著名的博客:Signal vs Noise,全世界都为之疯狂的web框架ruby on rails,还有2本书:《getting real》《rework》,今天我就要介绍一下《rework / 重来:更为简单有效的商业思维》这本书。
用一个词形容《rework》这本书就是“短小精悍”,只有130页,你只需要3-4个小时就可以读完,而且书中每一个观点都配了一张图,看起来很轻松,一点都不乏味。我们说“字如其人”,同样的道理,这本书很鲜明反映了37signals这家公司的特点。废话不多说了,我把每个观点都通用一句汉语总结出来了:
轻装上阵
不要被教条所束缚阅读全文
37signals是一家很特别的公司,他们有很独特的理念。虽然他们的团队只有16人,但他们的几个产品每年都会带来相当可观的利润。他们反对风险投资,反对扩大规模,反对堆砌功能。如果让我用一个词形容他们的话,那就是maverick,在某种程度上他们与乔布斯有相似之处。除了他们的产品外,他们还有一些byproduct: 一个很著名的博客:Signal vs Noise,全世界都为之疯狂的web框架ruby on rails,还有2本书:《getting real》《rework》,今天我就要介绍一下《rework / 重来:更为简单有效的商业思维》这本书。
用一个词形容《rework》这本书就是“短小精悍”,只有130页,你只需要3-4个小时就可以读完,而且书中每一个观点都配了一张图,看起来很轻松,一点都不乏味。我们说“字如其人”,同样的道理,这本书很鲜明反映了37signals这家公司的特点。废话不多说了,我把每个观点都通用一句汉语总结出来了:
轻装上阵
不要被教条所束缚阅读全文