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();
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值