From 05c090d0e116a365db789f252d1b1da2952f74ba Mon Sep 17 00:00:00 2001 From: woody Date: Sun, 3 Jun 2018 00:33:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E4=B8=8A=E5=8F=AF=E8=83=BD=E4=BC=9A?= =?UTF-8?q?=E5=BD=B1=E5=93=8D=E6=95=88=E7=8E=87=E7=9A=84=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E5=86=99=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + controller.py | 5 ++--- eventloop.py | 23 +++++++++++++++++++---- main.py | 10 ++++++++-- 4 files changed, 30 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index 44dbcd6..6e4c324 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ *.pyc .idea/ +log.txt diff --git a/controller.py b/controller.py index 32b0ede..b395fe8 100644 --- a/controller.py +++ b/controller.py @@ -18,16 +18,15 @@ def __init__(self, config): def add_to_loop(self, loop): if self._eventloop: - raise Exception("already add to loop") + raise Exception("controller already add to loop") self._eventloop = loop self._eventloop.add(self.server_socket, self) - print(self._eventloop._fdmap) def handle_event(self, sock, event): if sock == self.server_socket: # 新客户端连接 conn = self.server_socket.accept() - handler = Tcprelay (self, conn, self._eventloop, self._config, self._fd_to_handlers) + Tcprelay(self, conn, self._eventloop, self._config, self._fd_to_handlers) diff --git a/eventloop.py b/eventloop.py index e4d3a63..d12880e 100644 --- a/eventloop.py +++ b/eventloop.py @@ -2,6 +2,7 @@ # -*- coding: UTF-8 -*- import select +import logging class SelectLoop(object): @@ -19,9 +20,13 @@ def poll(self, timeout=None): return result def register(self, fd): + if self._r_list.__contains__(fd): + logging.info("select的_r_list的"+str(fd)+"已经存在") self._r_list.add(fd) def unregister(self, fd): + if not self._r_list.__contains__(fd): + logging.info("select的_r_list的"+str(fd)+"为空") self._r_list.remove(fd) @@ -38,6 +43,8 @@ def __init__(self): if hasattr(select, 'select'): self._impl = SelectLoop() self._model = 'select' + else: + raise Exception("Don't hava select model") self._fdmap = {} #[fd](f,handler) def poll(self): @@ -52,13 +59,17 @@ def poll(self): def stop(self): self._isstopping = True - def add(self, f, handler): - fd = f.fileno() - self._fdmap[fd] = (f, handler) + def add(self, socket, handler): + fd = socket.fileno() + if self._fdmap.__contains__(fd): + logging.info("event映射的文件标识符", fd, "已存在") + self._fdmap[fd] = (socket, handler) self._impl.register(fd) def remove(self, f, handler): fd = f.fileno() + if not self._fdmap[fd]: + logging.info("event映射的文件标识符", fd, "为空") del self._fdmap[fd] self._impl.unregister(fd) @@ -67,20 +78,24 @@ def run(self): while not self._isstopping: try: events = self.poll() - print("2333") except Exception as e: print(e) + logging.info(e) + # events(fileno,socket,1) for fd, sock, event in events: try: if sock.fileno() < 0: + logging.info("文件标识符小于零"+str(sock.fileno())) break if self._fdmap[sock.fileno()][0]: handler = self._fdmap[sock.fileno()][1] else: self.remove(sock.fileno()) + logging.warning("未找到对应的句柄"+str(sock.fileno())) break # 转入控制器 handler.handle_event(sock, event) except (OSError, IOError) as e: + logging.warning(e) print(e) diff --git a/main.py b/main.py index e00a43c..0acf9ec 100644 --- a/main.py +++ b/main.py @@ -5,18 +5,24 @@ import shell import controller import eventloop +import logging def main(): # 获取配置 config = shell.get_config() - + # 设置日志 debug/info/warning/error/critical + logging.basicConfig(level=logging.INFO, + filename='./log.txt', + filemode='w', + format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s') try: tcp_server = controller.Controller(config) loop = eventloop.EventLoop() tcp_server.add_to_loop(loop) except Exception as e: print(e) - sys.exit(0) + logging.error(e) + sys.exit(-1) loop.run()