對與服務端咱們能夠本身寫些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