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
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
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)
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)
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)
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
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
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)
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
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