我建议让每个客户端建立到服务器的套接字连接.每个客户端都可以运行一个线程,该线程尝试从套接字进行阻塞读取(将其置于后台线程中),该线程在套接字可用时从套接字中提取信息.然后,每当服务器写入该套接字时,客户端应立即获取它.客户端的连接应该是telnetlib.telnet imho的子类,因为它提供了一个方便的read_until方法.这样的事情可能是:
class RPCConnection(object, Telnet):
def __init__(self, host = 'localhost', port = 9198, auto = True):
Telnet.__init__(self)
self.host, self.port, self.connected = host, port, False
if auto:
self._connect()
def _connect(self):
self.open(self.host, self.port)
self.connected = True
def _disconnect(self):
self.close()
self.connected = False
def _send(self, dict):
self.write(json.dumps(dict))
def _recv(self):
resp = self.read_until('\n')
try:
return json.loads(resp)
except Exception, e:
print e
print resp