Example #1
0
class Worker(object):
    def __init__(self):
        pass

    def process(self, data, epoll_fd, fd):
        res = ""
        add_head = ""
        code = 200
        request = None
        try:
            request = HTTPRequest(data["readdata"])
        except Exception, e:
            res = "http format error: " + e.message
            code = 400
        headers = {}
        try:
            headers["Connection"] = "keep-alive"
            controller = vars.controller_dic.get(request.controller)
            controller = getattr(controller, request.controller)
            method = getattr(controller, request.action)
            res, new_headers = method(request)
            headers.update(new_headers)
        except Exception, e:
            print e, vars.backtrace()
            vars.logger.error(str(e) + vars.backtrace())
            res = "page not found"
            code = 404
Example #2
0
 def clear_fd(fd):
     try:
         _param = params[fd]
         epoll_fd.unregister(fd)
         _param["connection"].close()
     except Exception, e:
         print e, vars.backtrace()
         pass
Example #3
0
 def processer(self, args, kwargs):
     try:
         param = args[0]
         epoll_fd = args[1]
         fd = args[2]
         self.worker.process(param, epoll_fd, fd)
     except:
         print "job error:" + backtrace()
Example #4
0
 def poll_connects(self, listen_fd):
     try:
         epoll_fd = select.epoll()
         epoll_fd.register(
             listen_fd.fileno(), select.EPOLLIN | select.EPOLLET
             | select.EPOLLERR | select.EPOLLHUP)
     except select.error, e:
         print e, vars.backtrace()
         vars.logger.error(e)
Example #5
0
 def run(self):
     while True:
         try:
             args, kwargs = self.share_object.get()
             self.processer(args, kwargs)
         except Queue.Empty:
             continue
         except:
             print "thread error:" + backtrace()
Example #6
0
     while True:
         try:
             sendlen += cur_sock.send(writedata[sendlen:])
             if sendlen == total_write_len:
                 if param.get("keepalive", True):
                     param["readdata"] = ""
                     param["writedata"] = ""
                     param["writelen"] = 0
                     epoll_fd.modify(
                         fd, select.EPOLLET | select.EPOLLIN
                         | select.EPOLLERR | select.EPOLLHUP)
                 else:
                     clear_fd(fd)
                 break
         except socket.error, e:
             print e, vars.backtrace()
             if e.errno == errno.EAGAIN:
                 param["writelen"] = sendlen
                 break
             clear_fd(fd)
 else:
     continue
 # check time out
 if cur_time - last_min_time > vars.timeout_total:
     last_min_time = cur_time
     objs = params.items()
     for (key_fd, value) in objs:
         fd_time = value.get("time", 0)
         del_time = cur_time - fd_time
         if del_time > vars.timeout_total:
             clear_fd(key_fd)
Example #7
0
            code = 400
        headers = {}
        try:
            headers["Connection"] = "keep-alive"
            controller = vars.controller_dic.get(request.controller)
            controller = getattr(controller, request.controller)
            method = getattr(controller, request.action)
            res, new_headers = method(request)
            headers.update(new_headers)
        except Exception, e:
            print e, vars.backtrace()
            vars.logger.error(str(e) + vars.backtrace())
            res = "page not found"
            code = 404

        try:
            if headers.get("Connection", "") != "close":
                data["keepalive"] = True
            res_len = len(res)
            headers["Content-Length"] = res_len
            for key in headers:
                add_head += "%s: %s\r\n" % (key, headers[key])
            data["writedata"] = "HTTP/1.1 %s %s\r\n%s\r\n%s" % (code, res,
                                                                add_head, res)
            data["readdata"] = ""
            epoll_fd.modify(
                fd, select.EPOLLET | select.EPOLLOUT | select.EPOLLERR
                | select.EPOLLHUP)
        except Exception, e:
            print str(e) + vars.backtrace()