示例#1
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
示例#2
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
示例#3
0
 def sendPeer(self, msg: bytes, conn):
     isEnableCompress = b'0'
     if len(msg) >= RpcCompress.enableCompressLen:
         isEnableCompress = b'1'
         msg = RpcCompress.compress(msg)
     newbyte = struct.pack("i", len(msg))
     conn.sendall(newbyte + isEnableCompress + msg)
示例#4
0
 def sendPeer(self, msg: bytes, addr):
     isEnableCompress = b'0'
     if len(msg) >= RpcCompress.enableCompressLen:
         isEnableCompress = b'1'
         msg = RpcCompress.compress(msg)
     package = isEnableCompress + msg
     self.socket.sendto(package, addr)
示例#5
0
 def send(self, msg: bytes):
     isEnableCompress = b'0'
     if len(msg) >= RpcCompress.enableCompressLen:
         isEnableCompress = b'1'
         msg = RpcCompress.compress(msg)
     addr = (self.host, self.port)
     package = isEnableCompress + msg
     self.socket.sendto(package, addr)
示例#6
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
示例#7
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
示例#8
0
 def send(self, msg: bytes):
     isEnableCompress = b'0'
     if len(msg) >= RpcCompress.enableCompressLen:
         isEnableCompress = b'1'
         msg = RpcCompress.compress(msg)
     newbyte = struct.pack("i", len(msg))
     try:
         self.socket.sendall(newbyte + isEnableCompress + msg)
     except BrokenPipeError:
         self.reconnect()
         self.socket.sendall(newbyte + isEnableCompress + msg)
示例#9
0
 def send(self, msg):
     isEnableCompress = b'0'
     if len(msg) >= RpcCompress.enableCompressLen:
         isEnableCompress = b'1'
         msg = RpcCompress.compress(msg)
     msg = isEnableCompress + msg
     r = self.requestSession.post(self.url,
                                  headers=self.headers,
                                  data=msg,
                                  timeout=self.timeout)
     resp = r.content
     return resp
示例#10
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