对与服务端咱们能够本身写些API供监控使用。python
如下Code只是简单的给监控机吐出固定的mem值:80,不过,能够根据后期须要来开发相应的模块。这次我采用的是select来做为server端的socket监控,不过对与他的1024限制来讲,我以为仅做为监控服务端来讲足够了,若是做为更大并发的server端话,能够使用poll,epoll,或者多线程而且结合队列来作到必定的限制,别让过多的链接把服务器干挂。服务器
Server端多线程
#!/usr/bin/env python #Author:Badboy #CreatBy:2014/5/1 import socket,select host="192.168.1.61" port=1001 sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock.setblocking(0) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind((host,port)) sock.listen(1024) inputs=[sock] outputs=[] addrs={} debug=0 def get_free_mem(): return "80" def send_data(sock,data): if data.strip()=='mem': sock.send(get_free_mem()) else: sock.send("Error key words!") while inputs: rlist,wlist,elist=select.select(inputs,outputs,[],0) for s in rlist: if s == inputs[0]: clientsock,clientaddr=s.accept() inputs.append(clientsock) addrs[clientsock]=clientaddr[0] print "ClientAddr:",clientaddr[0] if debug: clientsock.send("Welcome here!\r\n") else: words=s.recv(1024) if not words: print "Byebye",addrs[s] s.close() inputs.remove(s) del addrs[s] if s in outputs: outputs.remove(s) continue if s not in outputs: outputs.append(s) for s in wlist: send_data(s,words) outputs.remove(s)
Client并发
#!/usr/bin/env python #Author Badboy #CreatBy:2014/5/1 import socket,sys mem_check="mem" host="192.168.1.61" port=1001 sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock.connect((host,port)) sock.send(mem_check) mem_warning=40 mem_critical=20 mem_size=sock.recv(1024) if mem_size=="Error key words!": print "Please check client!" sys.exit(1) mem_size=int(mem_size) if mem_size > mem_warning: print "Mem Size Ok!" elif mem_size < mem_critical: print "Mem Size Critical!" else: print "Mem Size Warning!"
以上仅是案例,你们能够在此基础上扩展修改的。app
若是想了解更多,请关注咱们的公众号
公众号ID:opdevos
扫码关注socket