#!/usr/bin/env python #-*-coding:UTF-8-*- """ @Item : Socket learing @Author : William @Group : DEV Group @Date : 2013-10-16 @Funtion: """ import sys,os,time,redis,traceback,json,threading,socket from cloud.hsnovnc import utils from cloud import log LOG = log.get_logger(__name__) class MySocket(object): def __init__(self, proto = 0): if proto == 0: self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sock.setblocking(True) else: self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # The socket binding host and port def my_bind(self, host, port): try: self.sock.bind((host, port)) except socket.error, e: LOG.error(e) return - 1 return 0 #listen TCP port ,default def my_listen(self, num = 1024): try: self.sock.listen(num) except socket.error, e: LOG.error(e) return - 1 return 0 #connect setting timeout def my_connect(self, host, port, time_out = -1): try: if time_out == -1: self.sock.setblocking(1) else: self.sock.settimeout(time_out) self.sock.connect((host, port)) except socket.error, e: LOG.error(e) return - 1 return 0 #accept teturn client address def my_accept(self, time_out = -1): addr = [] try: if time_out == -1: self.sock.setblocking(1) else: self.sock.settimeout(time_out) client_sock, addr = self.sock.accept() except socket.error, e: LOG.error(e) return client_sock, addr #recv setting timeout def my_recv(self, buf_size, time_out = -1): buf = ‘‘ try: if time_out == -1: self.sock.setblocking(1) else: self.sock.settimeout(time_out) buf = self.sock.recv(buf_size) except Exception, e: LOG.error(e) return buf #send setting timeout def my_send(self, buf, time_out = -1): try: if time_out == -1: self.sock.setblocking(1) else: self.sock.settimeout(time_out) send_len = self.sock.send(buf) return send_len except Exception, e: LOG.error(e) return - 1 #close def my_close(self, time_out = -1): try: if time_out == -1: self.sock.setblocking(1) else: self.sock.settimeout(time_out) self.sock.close() except socket.error, e: LOG.error(e) return - 1 return 0 class sock_thread(threading.Thread): def __init__(self, host, port,buf): threading.Thread.__init__(self) self.host = host self.port = port self.buf = buf def run(self): sock = MySocket() sock.my_bind(self.host, self.port) sock.my_listen(20) LOG.info(‘The socket has been connected‘) while True: conn, addr = sock.my_accept() while True: data = conn.recv(self.buf) if not data: break else: try: data = json.loads(data) if data[‘Node‘][‘UUID‘]: port = utils.get_vnc_port(data[‘Node‘].get(‘UUID‘,None)) data[‘Node‘][‘port‘] = port LOG.info(json.dumps(data)) conn.send(json.dumps(data)) else: conn.send() except: break conn.close() sock.my_close() class socket_demo(object): def __init__(self): host = utils.get_net_ip() self.host = host self.port = 10086 self.buf = 4096 def work(self): self.sock = sock_thread(self.host, self.port,self.buf) self.sock.start() time.sleep(0.5) def init(): st = socket_demo() st.work()
多线程之Openstack novnc 改造,缓解Nova压力,布布扣,bubuko.com
时间: 2024-11-19 21:34:31