1 select 和 socket
在python中可以使用select轻松监听io的变化,自然可以用来对socket做异步监控。下面是一个聊天室的例子:
http://www.cnblogs.com/hazir/p/python_chat_room.html
通过这个例子可以轻松封装一个本地消息机制。
2 unix socket
如果是在Local,可以使用unix socket。将连接改成下面代码即可。然后使用select监听所有的socket。
try:
os.unlink(self.unix_path)
except OSError:
if os.path.exists(self.unix_path):
raise
svcsock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
svcsock.bind(self.unix_path)
svcsock.listen(1)
https://pymotw.com/2/socket/uds.html
3 生成器实现
在客户端可以使用生成器替代select。
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.settimeout(30)
# connect to remote host
try:
sock.connect(self.unix_path)
except:
raise Exception("UnixSocketClient unable to connect")
while True:
try:
data = sock.recv(RECV_BUFFER)
if data == b'':
raise Exception("Disconnected from chat server")
yield data
except socket.timeout:
pass