我正在尝试创建自己的socket.socket子类,它将能够处理自定义消息。到目前为止,我的代码看起来像这样:
self._sockets.append(s)
logging.debug("Waiting for incoming connections on port %d" % (port))
while not self.shutdown:
inputready,outputready,exceptready = select(self._sockets,[],[])
print "Select returned"
for i in inputready:
if s == i:
# handle the server socket
client, address = s.accept()
self._sockets.append(client)
print "%r , %r" % (client, address)
else:
# handle all other sockets
s.handleMessage()
因此你可以看到我接受新的连接,或者如果它从另一个套接字返回,它将调用该套接字上的handleMessage。现在的问题是,当然,socket.accept()将返回一个socket.socket,而不是我的子类,它实现了handleMessage函数。
获取自定义类而不是默认的socket.socket最简单的方法是什么?
答案 0 :(得分:2)
根据您的描述,您似乎正在创建一个具有套接字(或套接字)的消息处理程序。在设计类 has -a 表示合成和委派时,是-a 可以表示继承。
所以从socket.socket继承是不合适的,你的代码已经看起来有点混合了。像这样的真正粗糙的伪代码可能最适合任务:
class MyMessageHandler(object):
def __init__(self):
self.sockets = [...]
def wait(self):
debug('waiting...')
i, o, e = select(...)
答案 1 :(得分:1)
为套接字包装器对象设置字典映射套接字描述符有多难?