Python对amf的支持

Python通过第三方库对amf进行支持,支持常用的数据类型。
使用amf进行数据传输不用在为拼字符串而烦恼。已对象的方式传输,对程序更友好。
那先看下客户端的代码
var socket:Socket=new Socket();
socket.objectEncoding=ObjectEncoding.AMF3;
var obj:Object=new Object();
socket.writeObject(obj);
下面是接受端的代码
var obj:Object=this.bytesAvailable?this.readObject():new Object();
这样就可以接受服务器返回的对象了。
下面是具体的python端的代码,首先要导入twisted框架,支持很多socket模型
如select,icop等模型。
import os
import sys
EnumIOCP = ['nt']
EnumEPOLL = ['posix', 'mac', 'os2', 'ce', 'java', 'riscos']

if os.name in EnumIOCP:
    from twisted.internet import iocpreactor
    iocpreactor.reactor.install()
elif os.name in EnumEPOLL:
    from twisted.internet import epollreactor
    epollreactor.install()
rom twisted.internet.protocol import Factory,Protocol
from twisted.protocols.basic import LineReceiver
from twisted.internet import reactor

import pyamf

初始化的时候要指定设置amf
        self.amfencoding=pyamf.AMF3
        self.amfencoder=pyamf.get_encoder(self.amfencoding)
        self.amfstream=self.amfencoder.stream
下面的代码是判断跨域文件,如果文件访问的域名下没有提供跨域文件,测直接仿照一个跨域文件。
  def dataReceived(self, data):
        if data=='<policy-file-request/>\0':
            self.transport.write(SocketPolicyFactory.Policy_file)
        else:
            self.factory.sendAll(data,self)
下面是关键的发生到客户端的代码
def sendObjectToSWF(self,asobj):
        self.amfstream.truncate()
        self.amfencoder = pyamf.get_encoder(self.amfencoding)
        self.amfencoder.writeElement(pyamf.ASObject(asobj))
        self.transport.write(self.amfencoder.stream.getvalue())

你可能感兴趣的:(框架,python,socket,OS)