Exemplo n.º 1
0
 def recv(self):
     #每次读一个完整的字节,再接收前4个字节,再取body
     conn = self.socket
     toread = 5
     readn = 0
     lengthbyte = b''
     while 1:
         bufsize = toread - readn
         if bufsize <= 0:
             break
         bytearr = conn.recv(bufsize)
         if len(bytearr) == 0:
             raise Exception('peer closed')
         lengthbyte = lengthbyte + bytearr
         readn = readn + len(bytearr)
     lengthField = lengthbyte[:4]
     compressField = lengthbyte[4:5]
     isEnableCompress = 0
     if compressField == b'1':
         isEnableCompress = 1
     toread = struct.unpack("i", lengthField)[0]
     readn = 0
     msg = b''
     while 1:
         bufsize = toread - readn
         if bufsize <= 0:
             break
         bytearr = conn.recv(bufsize)
         if len(bytearr) == 0:
             raise Exception('peer closed')
         msg = msg + bytearr
         readn = readn + len(bytearr)
     if isEnableCompress:
         msg = RpcCompress.decompress(msg)
     return msg
Exemplo n.º 2
0
    async def handle(self, reader, writer):
        while 1:
            try:
                data = await reader.read(5)
                lengthField = data[:4]
                compressField = data[4:5]
                isEnableCompress = 0
                if compressField == b'1':
                    isEnableCompress = 1
                toread = struct.unpack("i", lengthField)[0]
                msg = await reader.read(toread)
                if isEnableCompress:
                    msg = RpcCompress.decompress(msg)

                request = self.protocal.unserialize(msg)
                func, args, kwargs = self.protocal.parseRequest(request)
                resp = await self.run(func, args, kwargs)
                respbytes = self.protocal.serialize(resp)

                isEnableCompress = b'0'
                if len(msg) >= RpcCompress.enableCompressLen:
                    isEnableCompress = b'1'
                    respbytes = RpcCompress.compress(respbytes)
                lenbytes = struct.pack("i", len(respbytes))
                writer.write(lenbytes + isEnableCompress + respbytes)
            except Exception as ex:
                writer.close()
                return
Exemplo n.º 3
0
 def recv(self, conn=None):
     if conn == None:
         conn = self.socket
     package, addr = conn.recvfrom(100000)
     isEnableCompress = package[:1]
     msg = package[1:]
     if isEnableCompress == b'1':
         msg = RpcCompress.decompress(msg)
     return msg, addr
Exemplo n.º 4
0
 def callback(self, package):
     isEnableCompress = package[:1]
     msg = package[1:]
     if isEnableCompress == b'1':
         msg = RpcCompress.decompress(msg)
     request = self.protocal.unserialize(msg)
     func, args, kwargs = self.protocal.parseRequest(request)
     resp = self.run(func, args, kwargs)
     resp = self.protocal.serialize(resp)
     return resp
Exemplo n.º 5
0
 def recvPeer(self, conn):
     #每次读一个完整的字节,再接收前4个字节,再取body
     toread = 4
     readn = 0
     lengthbyte = b''
     while 1:
         bufsize = toread - readn
         if bufsize <= 0:
             break
         bytearr = conn.recv(bufsize)
         if len(bytearr) == 0:
             raise Exception('peer closed')
         lengthbyte = lengthbyte + bytearr
         readn = readn + len(bytearr)
     #读取是否压缩字段
     toread = 1
     readn = 0
     msg = b''
     while 1:
         bufsize = toread - readn
         if bufsize <= 0:
             break
         bytearr = conn.recv(bufsize)
         if len(bytearr) == 0:
             raise Exception('peer closed')
         msg = msg + bytearr
         readn = readn + len(bytearr)
     isEnableCompress = 0
     if msg == b'1':
         isEnableCompress = 1
     toread = struct.unpack("i", lengthbyte)[0]
     readn = 0
     msg = b''
     while 1:
         bufsize = toread - readn
         if bufsize <= 0:
             break
         bytearr = conn.recv(bufsize)
         if len(bytearr) == 0:
             raise Exception('peer closed')
         msg = msg + bytearr
         readn = readn + len(bytearr)
     if isEnableCompress:
         msg = RpcCompress.decompress(msg)
     return msg