Flash Socket连接Tokyo Tyrant

Tokyo Tyrant 是 Tokyo Cabinet 数据库网络接口。Tokyo Cabinet 是一款 DBM 数据库,该数据库读写非常快。Tokyo Tyrant拥有Memcached兼容协议,也可以通过HTTP协议进行数据交换,这里要使用的却是它的二进制协议。为什么呢?Tokyo Tyrant以epoll/kqueue/eventports解决了 "c10k" 问题,HTTP协议也很方便,可是短连接每次请求数据都要重新建立连接。有些富客户端应用想保持一个TCP连接,用flash提供的socket连接Tokyo Tyrant可以做到。
网上有很多介绍编译运行Tokyo Tyrant的文章,需要linux环境,如果是windows,可以使用colinux来测试。在windows下安装很方便,要下载的东西总共几十兆,不像虚拟机要下整个映像,运行还很慢。colinux就像其它的windows程序,性能很好。同一台机器windows下装colinux,在colinux里跑nginx,比直接跑在windows上的apache还快。
Tokyo Tyrant运行起来后,可以用以下actionscript测试,注意改IP。
package {
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.ProgressEvent;
	import flash.net.Socket;
	import flash.utils.ByteArray;
	import flash.utils.Endian;
	
	public class test extends Sprite
	{
		private var socket:Socket;		
		public function test()
		{
			socket = new Socket();			
			socket.addEventListener(Event.CONNECT,connectFun);
			socket.addEventListener(ProgressEvent.SOCKET_DATA,syncFun);
			socket.connect("192.168.0.6",1978);
		}
		private function connectFun(e:Event):void{
		  	trace("连接成功");		  			
			testput();
		}		
		private function syncFun(e:ProgressEvent):void{
		  if(socket.bytesAvailable == 1){//put成功返回1byte
		  	trace(socket.readByte());//0表示成功
		  	testget();
		  }else{//get返回
		  	trace(socket.readByte());//0表示成功
			var n:int = socket.readInt();
			trace(socket.readUTFBytes(n));//取回的值
		  }
		}
		private function testput():void{
			var key:String = "key2";
			var val:String = "value222";
			var ha:ByteArray=new ByteArray();
	    	ha.endian = Endian.BIG_ENDIAN;
	    	ha.writeByte(0xc8);
	    	ha.writeByte(0x10);
	    	ha.writeUnsignedInt(key.length);
			ha.writeUnsignedInt(val.length);
	    	ha.writeUTFBytes(key);
	    	ha.writeUTFBytes(val);
	    	socket.writeBytes(ha,0,ha.length);
	    	socket.flush();
		}
		private function testget():void{
			var key:String = "key2";
			var ha:ByteArray=new ByteArray();
	    	ha.endian = Endian.BIG_ENDIAN;
	    	ha.writeByte(0xc8);
	    	ha.writeByte(0x30);
	    	ha.writeUnsignedInt(key.length);
	    	ha.writeUTFBytes(key);
	    	socket.writeBytes(ha,0,ha.length);
	    	socket.flush();
		}
	}
}

你可能感兴趣的:(windows,nginx,socket,网络协议,Flash)