登录 |

configure编译时指定so共享库路径

2011年05月27日 下午 20:20 | 作者:

安装Kellner https://github.com/fhoenig/Kellner

由于Kellner需要libevent2支持,安装之后libevent2在/usr/local/lib/libevent-2.0.so.5

编译Kellner之后,php仍然载入/usr/lib/libevent-1.4.so.2

使用./configure CFLAGS=”-L/usr/local/lib” 指定编译时查找so目录,成功链接到libevent-2.0.so.5。

configure模板:

./configure \
       --with-package=/path/to/package \
       --enable-widget \
       --disable-gizmo \
       --with-x=29 \
       --with-blah-blah-blah
       CFLAGS="-O1 -g -mcpu=i686 \
          -L/usr/unlikely/lib \      # 编译时查找so路径
          -I/usr/unlikely/include \  # header文件路径
          -Wl,-R/usr/unlikely/lib"   # 运行时查找so路径

FlashAS3屏幕自适应

2011年05月24日 下午 43:20 | 作者:

  1. stage.align:左上对齐
  2. stage.scaleMode:不缩放
  3. stage.addEventListener(Event.RESIZE, function(){}):绑定窗口大小改变事件
  4. stage.stageWidth/stageHeight:显示区域宽高

查看DEMO:Full

package
{
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.text.TextField;
	import flash.utils.*;

	public class Full extends Sprite
	{
		public function Full()
		{
			stage.align		= StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;

			var circle:Sprite = new Sprite;
			// 绘制圆形
			circle.graphics.beginFill(0x000000,.2);
			circle.graphics.drawCircle(0,0,100);
			circle.graphics.endFill();
			// 居中
			circle.x = stage.stageWidth/2;
			circle.y = stage.stageHeight/2;
			addChild(circle);
			// 监听窗口大小改变Event.RESIZE事件
			stage.addEventListener(Event.RESIZE, function():void{
				// 居中
				circle.x = stage.stageWidth/2;
				circle.y = stage.stageHeight/2;
			});
			// debugText
			var txt:TextField = new TextField();
			txt.width = 300;
			addChild(txt);
			// 每秒更新stage属性
			setInterval(function():void{
				txt.text = 'stage.fullScreenWidth:\t'+stage.fullScreenWidth+'\nstage.fullScreenHeight:\t'+stage.fullScreenHeight+'\nstage.stageWidth:\t\t'+stage.stageWidth+'\nstage.stageHeight:\t\t'+stage.stageHeight+'\nstage.width:\t\t\t'+stage.width+'\nstage.height:\t\t\t'+stage.height;
			},1000);

			super();
		}
	}
}

debian6发布了,使用dotdeb源的朋友,记得改为oldstable

2011年05月23日 上午 48:58 | 作者:

之前一直使用http://php53.dotdeb.org的源给公司的Ubuntu9.10服务器升级php,安装php5-fpm……
上周apt-get upgrade无反应,使用apt-cache search php-fpm 也找到软件包,
一个操作不小心,使用packages.dotdeb.org,强制替换libc6,把服务器搞崩了……
到最后,原来是debian你升级了,你终于升级了!!!
这得得害死多少使用dotdeb的朋友……

deb http://packages.dotdeb.org oldstable all
deb-src http://packages.dotdeb.org oldstable all
deb http://php53.dotdeb.org oldstable all
deb-src http://php53.dotdeb.org oldstable all
gpg --recv-keys [KEY]
gpg -a --export [KEY] | apt-key add -
#repo.percona.com
gpg --recv-keys 1C4CBDCDCD2EFD2A
gpg -a --export CD2EFD2A | apt-key add -
#packages.dotdeb.org
gpg --recv-keys E9C74FEEA2098A6E
gpg --armor --export E9C74FEEA2098A6E | apt-key add -

Ubuntu9.10升级Nginx1.0

2011年05月19日 下午 32:51 | 作者:

由于自带的Nginx0.7.62存在一个Bug,Nginx PPA只支持Ubuntu10.04以上版本(http://wiki.nginx.org/Install),故而手动升级:

# Rewrite模块需要PCRE支持
apt-get install libpcre3-dev 
# 下载
wget http://nginx.org/download/nginx-1.0.2.tar.gz
tar xvf nginx-1.0.2.tar.gz
# 配置/编译/安装
./configure
make
sudo make install
# 默认安装到/usr/local/nginx/目录
cd /usr/local/nginx/
# 备份配置文件目录
mv conf conf.bak
# 将原来的/etc/nginx配置文件目录链接到/usr/local/nginx/conf
ln -sf /etc/nginx/ conf
# 更改启动脚本中的nginx路径
vim /etc/init.d/nginx
DAEMON=/usr/local/nginx/sbin/nginx
# 重启nginx
sudo killall nginx
sudo /etc/init.d/nginx start

nginx 0.8.33以下版本,IE7.0+POST发送后无法保持keepalive

2011年05月19日 下午 31:32 | 作者:

最近开发了一款仿街机的游戏《捕鱼达人》,发射炮弹时会发送数据到服务端验证命中,游戏过程中会持续的发炮,所以必须使用keepalive保存连接;测试期间一直是跑在Aapche2服务器上,上周五更换到Nginx+phpfpm上,结果用户投诉不断,打着打着,服务就没响应了,发炮分也不减、炮弹也打不中鱼……侥幸的以为是网络问题,以为是南北互通问题,也就呜呼哀哉……

在维护服务器时,偶然使用netstat –an | grep [公司IP] 查看连接数:

onoboss@onoboss:~$ netstat -an | grep 59.52.248.140
tcp        0      0 117.41.237.35:22        59.52.248.140:28033     ESTABLISHED
tcp        0      0 117.41.237.35:80        59.52.248.140:36998     ESTABLISHED
tcp        0      0 117.41.237.35:80        59.52.248.140:37127     TIME_WAIT
tcp        0    981 117.41.237.35:80        59.52.248.140:37003     TIME_WAIT
……

发现80端口建立了大量连接,很多都是TIME_WAIT状态,于是做了实验:使用IE玩游戏,一直发炮,果然不断的建立连接,当连接数达到80,由于无法再发起新的连接,游戏卡死了,只能重启IE,附HTTP包如下:

#REQUEST
POST http://kx.onofish.onoboss.com/gateway/?format=phprpc HTTP/1.1
Accept: */*
Accept-Language: zh-CN
Referer: http://kx.onofish.onoboss.com/Main.swf?9
x-flash-version: 10,2,159,1
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Content-Length: 257
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB6.6; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) chromeframe/9.0.597.107
Accept-Encoding: gzip, deflate
Host: kx.onofish.onoboss.com
Connection: Keep-Alive
Pragma: no-cache

#RESPONSE
HTTP/1.1 200 OK
Server: nginx/0.7.62  // Ubuntu9.10默认版本
Date: Thu, 19 May 2011 09:43:19 GMT
Content-Type: text/plain; charset=UTF-8
Connection: close // firefox/chrome都是正常的keep-alive
X-Powered-By: PHPRPC Server/3.0
P3P: CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
Expires: Thu, 19 May 2011 09:43:19 GMT
Cache-Control: no-store, no-cache, must-revalidate, max-age=0
Content-Length: 816

于是琢磨着更换Flash的RPC协议,从PHPRPC更换到AMFPHP,发现故障如常,肯定不是协议问题,再次切换回Apache下,HTTP包返回正常的Connection: keep-alive 了,由此判断是Nginx/IE的兼容问题:
http://nginx.org/en/CHANGES

Changes with nginx 0.8.33      01 Feb 2010
    *) Change: now keepalive connections after POST requests are not
       disabled for MSIE 7.0+.
       Thanks to Adam Lounds.

由于Ubuntu9.10默认版本0.7.62,手动升级到1.0,解决此问题!