def onRecv(self, fileno): if self._socket.fileno() == fileno: sock, addr = self._socket.accept() self._clients[sock.fileno()] = (sock, addr) KBEngine.registerReadFileDescriptor(sock.fileno(), self.onRecv) DEBUG_MSG("Poller::onRecv: new channel[%s/%i]" % (addr, sock.fileno())) else: sock, addr = self._clients.get(fileno, None) if sock is None: return if addr[0] not in ('localhost', '127.0.0.1'): return data = sock.recv(2048) DEBUG_MSG("Poller::onRecv: %s/%i get data, size=%i" % (addr, sock.fileno(), len(data))) DEBUG_MSG("Poller::onRecv: data = {}".format(data)) try: data = data.decode() data = str(data).split('\r\n') content = json.loads(data[-1]) self.processData(content) except: import traceback ERROR_MSG(traceback.format_exc()) finally: KBEngine.deregisterReadFileDescriptor(sock.fileno()) sock.close() del self._clients[fileno]
def onRecv(self, fileno): if self._socket.fileno() == fileno: sock, addr = self._socket.accept() self._clients[sock.fileno()] = (sock, addr) KBEngine.registerReadFileDescriptor(sock.fileno(), self.onRecv) DEBUG_MSG("BEGIN Poller::onRecv: new channel[%s/%i]" % (addr, sock.fileno())) else: sock, addr = self._clients.get(fileno, None) if sock is None: return data = sock.recv(2048) DEBUG_MSG("BEGIN Poller::onRecv: %s/%i data size=%i" % (addr, sock.fileno(), len(data))) self.processData(sock, addr, data) KBEngine.deregisterReadFileDescriptor(sock.fileno()) sock.close() del self._clients[fileno]
def listen(self, address='127.0.0.1', port=80): assert not self._sock and port > 0 self._sock = socket.socket() self._sock.bind((address, port)) self._sock.listen(10) KBEngine.registerReadFileDescriptor(self._sock.fileno(), self.on_accept)
def start(self, addr, port): """ virtual method. """ self._socket = socket.socket() self._socket.bind((addr, port)) self._socket.listen(10) KBEngine.registerReadFileDescriptor(self._socket.fileno(), self.onRecv)
def listen(self, port, addr='0.0.0.0'): if not self._sock and port > 0: self._sock = socket.socket() self._sock.bind((addr, port)) self._sock.listen(10) KBEngine.registerReadFileDescriptor(self._sock.fileno(), self.onAccept) return True return False
def accept(self, fd): if fd != self._fd: ERROR_MSG("Server::accept, fd[%s] is not _fd[%s]" % (fd, self._fd)) return # addr = (hostaddr, port) sock, addr = self._socket.accept() # 设置为unblocking sock.setblocking(False) socket_fd = sock.fileno() new_conn = Connection(sock, addr, self.app) DEBUG_MSG("Server::accept, new connection[%s], addr[%s], fd[%s]" % (id(new_conn), addr, socket_fd)) KBEngine.registerReadFileDescriptor(socket_fd, new_conn.data_received)
def onSend(self, fileno): if self._sock.fileno() == fileno: try: KBEngine.deregisterWriteFileDescriptor(self._sock.fileno()) opt, rest, host, method, end = self._reqs_curt[1], self._reqs_curt[3], self._reqs_curt[4], "GET", "Accept: */*\r\n\r\n" if opt and len(opt) > 0: method = 'POST' end = 'Content-Type: application/x-www-form-urlencoded\r\nContent-Length: %s\r\n%s' % self.onHandlePost(opt) data = SEND_CNT % (method, rest, host, end) self._sock.send(data.encode('utf-8')) KBEngine.registerReadFileDescriptor(self._sock.fileno(), self.onRecv) except: self._reqs.append(self._reqs_curt) self.logsError() self.cleanSocketStatus()
def run(self, host, port, backlog=128): INFO_MSG("httpserver run, host[%s], post[%s]..." % (host, port)) try: self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) except socket.error as e: ERROR_MSG("server run socket error: %s" % str(e)) raise self._socket.setblocking(False) self._socket.bind((host, port)) self._socket.listen(backlog) self._set_server_fd() self._host = host self._port = port KBEngine.registerReadFileDescriptor(self._fd, self.accept)
def onRecv(self, fileno): if self._socket.fileno() == fileno: sock, addr = self._socket.accept() self._clients[sock.fileno()] = (sock, addr) KBEngine.registerReadFileDescriptor(sock.fileno(), self.onRecv) DEBUG_MSG("Poller::onRecv: new channel[%s/%i]" % (addr, sock.fileno())) else: sock, addr = self._clients.get(fileno, None) if sock is None: return data = sock.recv(2048) DEBUG_MSG("Poller::onRecv: %s/%i get data, size=%i" % (addr, sock.fileno(), len(data))) self.processData(sock, data) KBEngine.deregisterReadFileDescriptor(sock.fileno()) sock.close() del self._clients[fileno]
def onSend(self, task, sock, file_no): if sock.fileno() == file_no: try: KBEngine.deregisterWriteFileDescriptor(file_no) opt, rest, host, method, end = task[1], task[3], task[4], "GET", "Accept: */*\r\n\r\n" if opt and len(opt) > 0: method = 'POST' end = 'Content-Type: application/x-www-form-urlencoded\r\nContent-Length: %s\r\n%s' % self.onHandlePost(opt) data = SEND_CNT % (method, rest, host, end) # DEBUG_MSG("### onSend %s" % data) sock.send(data.encode('utf-8')) KBEngine.registerReadFileDescriptor(sock.fileno(), Functor(self.onRecv, task, sock)) except: self._tasks.append(task) self.logsError() if not sock._closed: sock.close()
def onAccept(self, fileno): if self._sock.fileno() == fileno: sock, addr = self._sock.accept() KBEngine.registerReadFileDescriptor( sock.fileno(), Functor.Functor(self.onRecv, sock, addr))
def registerRead(self): if self._registerRead == False: KBEngine.registerReadFileDescriptor(self._socket.fileno(), self.onRecv) self._registerRead = True
def on_accept(self, fileno): if self._sock.fileno() == fileno: sock, address = self._sock.accept() KBEngine.registerReadFileDescriptor( sock.fileno(), partial(self.on_receive, sock, address))