def selectsvr_send(self, sendpack):
     head = nshead.NsHead()
     #mcpack_body = mcpack.dumps(packData, charset='gb18030')
     mcpack_body = mcpack.dumps(sendpack)
     head.body_len = len(mcpack_body)
     request = head.pack() + mcpack_body
     if not self.writer.Write(request):
         print " get cluster writer fail lang %d type %d url %s" % (sendpack['language'], sendpack['type'], sendpack['url'])
         return False
     return True
Exemple #2
0
	def handle(self, conn):

		sock, addr = conn
		timer = ub_timer()

		# recv
		timer.settask("rev")
		sock.settimeout(self.server.rdtmout)
		head = self.__recv(sock, self.nshead.size)
		if len(head) == 0:
			raise socket.error("connection reset by peer")
		self.nshead.frombin(head)

		log.setlogid(self.nshead.log_id)
		log.setreqip("%s", addr[0])

		#print 'ready to receive body'

		body = self.__recv(sock, self.nshead.body_len)
		if len(body) != self.nshead.body_len:
			raise socket.error("read body failed")
		req = mcpack.loads(body)

		# callback
		timer.settask("proc")
		if self.nshead.provider != "__MONITOR__":
			#print 'ready to callback'
			#print 'req: %s' % str(req)
			resp = self.server.callback(req)
			#print 'response: %s' % str(resp)

			rpack = mcpack.dumps(resp)
			rhead = self.nshead
			rhead.provider = self.server.name
			rhead.body_len = len(rpack)
			rbuf = rhead.tobin() + rpack

		else:
			#print 'enter in !!!!'
			log.trace("receive a monitor request with nshead provider '__MONITOR__'.");
			rhead = self.nshead
			rhead.provider = self.server.name
			rhead.body_len = 0
			rbuf = rhead.tobin()

		# send
		timer.settask("write")
		sock.settimeout(self.server.wrtmout)
		sock.sendall(rbuf)

		timer.endtask()
		log.setproctime("total:%u(ms) rev:%u+proc:%u+write:%u",
				timer.gettotal(), timer.gettask("rev"),
				timer.gettask("proc"), timer.gettask("write"))
		log.notice("")
Exemple #3
0
def handle(req_type, text):
    #ret infomation
    ret = 0
    resp_code = 0
    resp_content = "xxx"
    #video_class server
    ip = "127.0.0.1"
    port = 9875
    server_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        #1.build request pack
        ##@content
        body = {
            'request_type': mcpack.INT32(req_type),
            'text': mcpack.STR(text)
        }
        mcpack_body = mcpack.dumps(body)
        ##@head
        head = nshead.NsHead()
        head.body_len = len(mcpack_body)

        #2. connect to server
        #server_sock.create_connection((ip, port))
        server_sock.connect((ip, port))
        server_sock.settimeout(60)

        #3. send request
        request = head.pack() + mcpack_body
        server_sock.sendall(request)

        #4. recv response
        res_nshead = nshead.NsHead.from_str(server_sock.recv(36))
        if res_nshead is False:
            return -3, -1, "text is invalid"
        recved = 0
        body = ''
        while recved < res_nshead.body_len:
            temp = server_sock.recv(1024)
            recved += len(temp)
            body = body + temp
        res_body = mcpack.loads(body)
        #parse response
        resp_code = res_body['response_code']
        resp_content = res_body['tags']
    except Exception as ex:
        ret = -1
        resp_code = -1
        resp_content = "maybe error in param!"
        logging.error(traceback.format_exc())
    finally:
        #5. disconnect with server
        server_sock.close()
    return ret, resp_code, resp_content
Exemple #4
0
def thread_work():
	head = nshead()
	pack = mcpack.dumps({"cmd":"test"})
	for i in range(COUNT):
		head.log_id = 1234560000 + i
		head.body_len = len(pack)

		resp = cli.invite(head, pack)

		if not resp:
			log.warning("ub_client invite error")
			time.sleep(1)

		(h, body) =  resp
		print mcpack.loads(body)
Exemple #5
0
    def send(self, cmd_id, keys):
        """
        description: send cmd 
        """
        try:
            if self.is_connected == False:
                self.connect()
            head = nshead.NsHead()
            head.id = cmd_id
            # TODO parse keys
            body = keys
            mcpack_body = mcpack.dumps(body)
            head.body_len = len(mcpack_body)

            if self.verbose_mode == True:
                print "Send:"
                print head
                print body

            request = head.pack() + mcpack_body
            self.sock.send(request)
        except:
            print traceback.format_exc()
            sys.exit(2)
Exemple #6
0
def deal_mcgi(listen, response_type):

    if response_type == 'normal':
        req_body = "Hello, Nginx, just do it"
        req_nshead = nshead.NsHead()

        header = [
            mcpack.STR('Cache-Control : max-age=60'),
            mcpack.STR('Connection : close'),
            mcpack.STR('Content-Type : text/html; charset=UTF-8'),
            mcpack.STR('Server : nginx/1.4.4'),
            mcpack.STR('Status : 200'),
            mcpack.STR('Version : HTTP/1.1'),
            mcpack.STR('X-Powered-By : HPHP'),
        ]

        ppack = {
            'Status': mcpack.STR('200'),
            'Headers': mcpack.ARR(header),
            'Content-Length': mcpack.STR(len(req_body)),
        }

        res_mcpack = mcpack.dumps(ppack)

        req_nshead.body_len = len(res_mcpack) + len(req_body)
        response = req_nshead.pack() + res_mcpack + req_body
    elif response_type == '4xx':
        req_nshead = nshead.NsHead()

        header = [
            mcpack.STR('Cache-Control : max-age=60'),
            mcpack.STR('Connection : close'),
            mcpack.STR('Content-Type : text/html; charset=UTF-8'),
            mcpack.STR('Server : nginx/1.4.4'),
            mcpack.STR('Status : 404'),
            mcpack.STR('Version : HTTP/1.1'),
            mcpack.STR('X-Powered-By : HPHP'),
        ]

        ppack = {
            'Status': mcpack.STR('404'),
            'Headers': mcpack.ARR(header),
            'Content-Length': mcpack.STR('0'),
        }

        res_mcpack = mcpack.dumps(ppack)

        req_nshead.body_len = len(res_mcpack)
        response = req_nshead.pack() + res_mcpack
    elif response_type == '5xx':
        req_nshead = nshead.NsHead()

        header = [
            mcpack.STR('Cache-Control : max-age=60'),
            mcpack.STR('Connection : close'),
            mcpack.STR('Content-Type : text/html; charset=UTF-8'),
            mcpack.STR('Server : nginx/1.4.4'),
            mcpack.STR('Status : 503'),
            mcpack.STR('Version : HTTP/1.1'),
            mcpack.STR('X-Powered-By : HPHP'),
        ]

        ppack = {
            'Status': mcpack.STR('503'),
            'Headers': mcpack.ARR(header),
            'Content-Length': mcpack.STR('0'),
        }

        res_mcpack = mcpack.dumps(ppack)

        req_nshead.body_len = len(res_mcpack)
        response = req_nshead.pack() + res_mcpack
    elif response_type == 'retry':
        req_nshead = nshead.NsHead()

        header = [
            mcpack.STR('Cache-Control : max-age=60'),
            mcpack.STR('Connection : close'),
            mcpack.STR('Content-Type : text/html; charset=UTF-8'),
            mcpack.STR('Server : nginx/1.4.4'),
            mcpack.STR('Status : 503'),
            mcpack.STR('X-MCGI-ONERROR : RETRY'),
            mcpack.STR('Version : HTTP/1.1'),
            mcpack.STR('X-Powered-By : HPHP'),
        ]

        ppack = {
            'Status': mcpack.STR('503'),
            'Headers': mcpack.ARR(header),
            'Content-Length': mcpack.STR('0'),
        }

        res_mcpack = mcpack.dumps(ppack)

        req_nshead.body_len = len(res_mcpack)
        response = req_nshead.pack() + res_mcpack

    elif response_type == '302':
        req_nshead = nshead.NsHead()

        header = [
            mcpack.STR('Cache-Control : max-age=60'),
            mcpack.STR('Connection : close'),
            mcpack.STR('Content-Type : text/html; charset=UTF-8'),
            mcpack.STR('Server : nginx/1.4.4'),
            mcpack.STR('Status : 302'),
            mcpack.STR('Location : http://www.baidu.com'),
            mcpack.STR('Version : HTTP/1.1'),
            mcpack.STR('X-Powered-By : HPHP'),
        ]

        ppack = {
            'Status': mcpack.STR('302'),
            'Headers': mcpack.ARR(header),
            'Content-Length': mcpack.STR('0'),
        }

        res_mcpack = mcpack.dumps(ppack)

        req_nshead.body_len = len(res_mcpack)
        response = req_nshead.pack() + res_mcpack

    else:
        print 'response type not support'
        usage()

    serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    serverSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    listen = int(listen)
    serverSocket.bind(('0.0.0.0', listen))
    serverSocket.listen(200)
    serverSocket.setblocking(0)

    epoll = select.epoll()
    epoll.register(serverSocket.fileno(), select.EPOLLIN)

    try:
        connections = {}
        responses = {}
        arrivedTimes = {}
        while True:
            events = epoll.poll(1)
            for fileno, event in events:
                if fileno == serverSocket.fileno():
                    try:
                        connection, address = serverSocket.accept()
                        connection.setblocking(0)
                        epoll.register(connection.fileno(), select.EPOLLIN)
                        connections[connection.fileno()] = connection
                        responses[connection.fileno()] = response
                    except:
                        print "epoll accept error"
                elif event & select.EPOLLIN:
                    try:
                        res_nshead = nshead.NsHead.from_str(
                            connection.recv(36))
                        received = 0
                        body = ''
                        while received < res_nshead.body_len:
                            tmp = connection.recv(1024)
                            received += len(tmp)
                            body = body + tmp
                        res_mcpack = mcpack.loads(body)
                        ext_data = ''
                        if 'HTTP_CONTENT_LENGTH' in res_mcpack and res_mcpack[
                                'HTTP_CONTENT_LENGTH'] != 0:
                            ext_data = body[res_nshead.body_len -
                                            res_mcpack['data_len']:]

                        print "nshead:"
                        print res_nshead

                        print ""
                        print "mcpack:"
                        for (k, v) in res_mcpack.items():
                            print "  " + k + " : " + v
                        if ext_data != '':
                            print "ext_data : " + ext_data

                        arrivedtime = int(time.time() * 1000)
                        arrivedTimes[fileno] = arrivedtime
                        epoll.modify(fileno, select.EPOLLOUT)
                    except:
                        print traceback.format_exc()
                        print "epoll read error"
                elif event & select.EPOLLOUT:
                    try:
                        currenttime = int(time.time() * 1000)
                        if (currenttime - arrivedTimes[fileno] > 50):
                            byteswritten = connections[fileno].send(
                                responses[fileno])
                            responses[fileno] = responses[fileno][
                                byteswritten:]
                            if len(responses[fileno]) == 0:
                                epoll.modify(fileno, 0)
                                connections[fileno].shutdown(socket.SHUT_WR)
                    except:
                        print traceback.format_exc()
                        print "epoll write error"
                elif event & select.EPOLLHUP:
                    try:
                        epoll.unregister(fileno)
                        connections[fileno].close()
                        del connections[fileno]
                    except:
                        print traceback.format_exc()
                        print "epoll close error"
    finally:
        print 'error'
        epoll.unregister(serverSocket.fileno())
        epoll.close()
        serverSocket.close()