flex flash与服务器通信的方式.docx
- 文档编号:9448135
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:18
- 大小:17.06KB
flex flash与服务器通信的方式.docx
《flex flash与服务器通信的方式.docx》由会员分享,可在线阅读,更多相关《flex flash与服务器通信的方式.docx(18页珍藏版)》请在冰点文库上搜索。
flexflash与服务器通信的方式
Flex/Flash支持的数据通讯方式有:
httpURLLoader
SOAP(webservice)
json
xml
flashremoting/AMF3
xmlsocket
socket(二进制)(自定义协议)
高并发的应用中用户状态可以用cookie,不用session
如果是多人实时交互如聊天系统,多人在线互动等应用模块 需要用socket进行通讯(与服务器建立长连接),服务器端可以自己写多线程SocketServer也可以基于现有开源的Socketlib进行开发,比如QuickServer和XSocket.
读取非实时交互数据如房间列表,游戏列表,用户信息等数据,目前推荐用flashremotingAMF3协议
以下是一个FLASHAS3写的Socket通讯类
packagenet
{
importflash.events.*;
import.*;
importflash.utils.*;
publicclassmySocketextendsEventDispatcher
{
privatevarnStatus:
int=0;
privatevarndx:
int=0;
privatevarpacket:
ByteArray;
privateconstREQ_PROCESS:
int=4;
privatevarpacketlen:
uint=0;
publicvarport:
int;
privatevarreadpacket:
ByteArray;
publicvarconnected:
Boolean=false;
privateconstREQ_DONE:
int=3;
publicvarhost:
String;
privatevarpacketbody:
ByteArray;
privatevarreadbodypos:
int=8;
privateconstREQ_REQUEST:
int=0;
privatevarnreadPos:
int=0;
privateconstPACKET_HEADER_SIZE:
int=8;
privateconstREQ_BODY:
int=2;
privatevarnBodyLen:
uint=0;
privateconstREQ_ERROR:
int=5;
privateconstPACKET_BUFFER_SIZE:
int=16384;
privateconstREQ_HEADER:
int=1;
privatevarsocket:
Socket;
publicfunctionmySocket(param1:
Boolean=false,param2:
String="String")
{
packetlen=0;
nStatus=0;
nreadPos=0;
nBodyLen=0;
ndx=0;
connected=false;
readbodypos=PACKET_HEADER_SIZE;
packet=newByteArray();
packetbody=newByteArray();
readpacket=newByteArray();
readpacket.endian=Endian.LITTLE_ENDIAN;
packet.endian=Endian.LITTLE_ENDIAN;
packetbody.endian=Endian.LITTLE_ENDIAN;
return;
}//endfunction
publicfunctionwriteBegin(param1:
int,param2:
int=0,param3:
int=0):
void
{
param2=SERVER_PACKET_VER;
param3=SERVER_SUBPACKET_VER;
packetlen=0;
packet.position=0;
packet.length=0;
packetbody.position=0;
packetbody.length=0;
packet.writeMultiByte("AA","gb2312");
packet.writeShort(param1);
packet.writeByte(param2);
packet.writeByte(param3);
return;
}//endfunction
publicfunctionwriteByte(param1:
int):
void
{
packetlen=packetlen+1;
packetbody.writeByte(param1);
return;
}//endfunction
publicfunctionwriteInt(param1:
int):
void
{
packetlen=packetlen+4;
packetbody.writeInt(param1);
return;
}//endfunction
publicfunctiongetbodylen():
int
{
readpacket.position=6;
returnreadpacket.readShort();
}//endfunction
publicfunctionreadUint():
uint
{
readpacket.position=readbodypos;
readbodypos=readbodypos+4;
returnreadpacket.readUnsignedInt();
}//endfunction
privatefunctionparse_header():
Boolean
{
var_loc_1:
ByteArray;
var_loc_2:
int;
_loc_1=newByteArray();
_loc_1.writeMultiByte("AA","gb2132");
if(readpacket[0]!
=_loc_1[0]||readpacket[1]!
=_loc_1[1])
{
_loc_1=null;
returnfalse;
}//endif
_loc_1=null;
_loc_2=getcmd();
if(_loc_2<=0||_loc_2>=32000)
{
returnfalse;
}//endif
nBodyLen=getbodylen();
if(nBodyLen>=0&&nBodyLen { returntrue; }//endif returnfalse; }//endfunction publicfunctiongetcmd(): int { readpacket.position=2; returnreadpacket.readShort(); }//endfunction publicfunctiongetver(): int { readpacket.position=4; returnreadpacket.readByte(); }//endfunction privatefunctionsocketDataFun(param1: ProgressEvent): void { var_loc_2: int; var_loc_3: mySocketEvent; ndx=0; _loc_2=socket.bytesAvailable; while(ndx<_loc_2&&nStatus! =REQ_ERROR) { //label switch(nStatus) { caseREQ_REQUEST: caseREQ_HEADER: { if(! read_header(_loc_2)) { break; }//endif if(! parse_header()) { nStatus=REQ_ERROR; break; } else { nStatus=REQ_BODY; }//endcase }//endelseif caseREQ_BODY: { if(parse_body(_loc_2)) { nStatus=REQ_DONE; }//endif break; }//endcase default: { return; break; }//enddefault }//endswitch if(nStatus==REQ_ERROR) { return; }//endif if(nStatus==REQ_DONE) { _loc_3=newmySocketEvent(mySocketEvent.SYNC); dispatchEvent(_loc_3); _loc_3=null; reset(); }//endif }//endwhile return; }//endfunction publicfunctionsendcmd(): void { if(connected) { socket.writeBytes(packet,0,packetlen+PACKET_HEADER_SIZE); socket.flush(); }//endif return; }//endfunction privatefunctionparse_body(param1: int): Boolean { var_loc_2: int; var_loc_3: int; var_loc_4: uint; var_loc_5: int; _loc_2=nBodyLen+PACKET_HEADER_SIZE-nreadPos; _loc_3=param1-ndx; if(_loc_2<=0) { returntrue; }//endif if(_loc_3<=0) { returnfalse; }//endif _loc_4=_loc_3<_loc_2? (_loc_3): (_loc_2); _loc_5=readpacket.length+_loc_4; if(_loc_5>PACKET_BUFFER_SIZE) { returnfalse; }//endif socket.readBytes(readpacket,readpacket.position,_loc_4); nreadPos=nreadPos+_loc_4; ndx=ndx+_loc_4; if(nreadPos { readpacket.position=nreadPos; returnfalse; }//endif returntrue; }//endfunction publicfunctiongetsubver(): int { readpacket.position=5; returnreadpacket.readByte(); }//endfunction privatefunctionsecurityerrfun(param1: SecurityErrorEvent): void { close(); dispatchEvent(newmySocketEvent(mySocketEvent.SECURITYERROR)); return; }//endfunction publicfunctionreadByte(): int { readpacket.position=readbodypos; readbodypos=readbodypos+1; returnreadpacket.readByte(); }//endfunction publicfunctionreadShort(): int { readpacket.position=readbodypos; readbodypos=readbodypos+2; returnreadpacket.readShort(); }//endfunction privatefunctionconnectFun(param1: Event): void { connected=true; clearEvent(); socket.addEventListener(ProgressEvent.SOCKET_DATA,socketDataFun); socket.addEventListener(Event.CLOSE,closeFun); dispatchEvent(newmySocketEvent(mySocketEvent.CONNECT)); return; }//endfunction privatefunctionreset(): void { nStatus=REQ_REQUEST; nreadPos=0; nBodyLen=0; readpacket.position=0; readpacket.length=0; return; }//endfunction publicfunctionreadbegin(): void { readbodypos=PACKET_HEADER_SIZE; return; }//endfunction privatefunctionread_header(param1: int): Boolean { while(nreadPos { //label socket.readBytes(readpacket,nreadPos,1); nreadPos++; ndx++; }//endwhile if(nreadPos { returnfalse; }//endif returntrue; }//endfunction publicfunctionwriteString(param1: String): void { var_loc_2: ByteArray; _loc_2=newByteArray(); _loc_2.writeMultiByte(param1,"utf-8"); packetbody.writeUnsignedInt(_loc_2.length+1); packetlen=packetlen+4; packetbody.writeBytes(_loc_2); packetbody.writeByte(int("0")); packetlen=packetlen+(_loc_2.length+1); _loc_2=null; return; }//endfunction publicfunctionreadgb2132String(): String { var_loc_1: uint; readpacket.position=readbodypos; readbodypos=readbodypos+4; _loc_1=readpacket.readUnsignedInt(); readpacket.position=readbodypos; readbodypos=readbodypos+_loc_1; returnreadpacket.readMultiByte(_loc_1,"gb2132"); }//endfunction publicfunctionwriteUint(param1: uint): void { packetlen=packetlen+4; packetbody.writeUnsignedInt(param1); return; }//endfunction publicfunctionwriteShort(param1: int): void { packetlen=packetlen+2; packetbody.writeShort(param1); return; }//endfunction privatefunctionerrorFun(param1: IOErrorEvent): void { close(); dispatchEvent(newmySocketEvent(mySocketEvent.ERROR)); return; }//endfunction publicfunctionreadString(): String { var_loc_1: uint; readpacket.position=readbodypos; readbodypos=readbodypos+4; _loc_1=readpacket.readUnsignedInt(); readpacket.position=readbodypos; readbodypos=readbodypos+_loc_1; returnreadpacket.readMultiByte(_loc_1,"utf-8"); }//endfunction publicfunctionconnect(param1: String,param2: int): void { host=param1; port=param2; if(connected) { socket.close(); }//endif socket=newSocket(); socket.endian=Endian.LITTLE_ENDIAN; socket.connect(host,port); reset(); socket.addEventListener(IOErrorEvent.IO_ERROR,errorFun); socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityerrfun); socket.addEventListener(Event.CONNECT,connectFun); return; }//endfunction privatefunctionclearEvent(): void { if(socket! =null) { if(socket.hasEventListener(IOErrorEvent.IO_ERROR)) { socket.removeEventListener(IOErrorEvent.IO_ERROR,errorFun); }//endif if(socket.hasEventListener(Event.CONNECT)) { socket.removeEventListener(Event.CONNECT,connectFun); }//endif if(socket.hasEventListener(ProgressEvent.SOCKET_DATA)) { socket.removeEventListener(ProgressEvent.SOCKET_DATA,socketDataFun); }//endif if(socket.hasEventListener(Event.CLOSE)) { socket.removeEventListener(Event.CLOSE,closeFun); }//endif if(socket.hasEventListener(SecurityErrorEvent.SECURITY_ERROR)) { socket.removeEventListener(SecurityErrorEvent.SECURITY_ERROR,securityerrfun); }//endif }//endif return; }//endfunction privatefunctioncloseFun(param1: Event): void { connected=false; dispatchEvent(newmySocketEvent(mySocketEvent.CLOSE)); return; }//endfunction publicfunctionreadInt(): int { readpacket.position=readbodypos; readbodypos=readbodypos+4; returnreadpacket.readInt(); }//endfunction publicfunctionwriteEnd(): voi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- flex flash与服务器通信的方式 flash 服务器 通信 方式