python socket心跳检测多少秒

python socket心跳检测多少秒,第1张

socket通信原理

Server端建立一个socket,然后绑定到一个(IP,port)对里,然后开启监听,准备好接收来自客户端(另一方)的请求。其中和客户端通信的方法有send(), sendall(), accept(), recv()等。

Client端建立socket,进行对服务器的连接,(可选的设置阻塞(同异步)方式等),连接上服务器后,进行数据的交互,sendall(), recv()等。

**注意:!服务端和客户端(socket两端)都有数据的“收”,“发”方法。

json的处理:将数据转化为json格式(包装):json.dumps(data), 返回一个封装后的数据,然后发送给另一端,另一端再进行解析(data接收(recv())后,进行加载(json.loads(data))), 这样就可以按照字典的格式进行读取,data_loaded['ip']等

最后:连接关闭。socket的开启会占用带宽,必须记得关闭。

以下是“心跳”程序的服务端(监听心跳)代码:

#!/usr/bin/python

#encoding:utf-8

'''

server

'''

import socket, sys, json

from thread import *

BUF_SIZE = 4096

HOST = socket.gethostname()

PORT = 7878

try:

    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

except socket.error, e:

    print "Error creating socket: %s" %e

    sys.exit()

try:

    server.bind((HOST, PORT))

except socket.error:

    print "Bind failed!"

    sys.exit()

print "Socket bind complete"

server.listen(10)

print "Socket now listening"

def clientthread(coon):

    coon.send("Welcome to the server!")

    while True:

        try:

            data = coon.recv(BUF_SIZE)

            data_loaded = json.loads(data)

            print "ip: "+str(data_loaded['ip'])+" |status: "+data_loaded['status']+" |pid: "+str(data_loaded['pid'])

            # coon.sendall("hello, I love you!")    # set the client :setblock(0)is ok!

        except socket.error:

            print "One Client (IP: %s) Connected over!" % data_loaded['ip']

            break

    coon.close()

while True:

    coon, addr = server.accept()

    print "Connected with %s: %s " % (addr[0], str(addr[1]))

    start_new_thread(clientthread, (coon,))

server.close()

希望能帮到你!

如果被监测程序是你自己编写的,那你可以在程序进程结束的时候主动去通知监测进程。

如果不是,而你要监测它的运行情况,那么这和 *** 作系统有关。Windows和Linux下的处理方式是不一样的。

如果你用的socket包里的那些阻塞接口,当然写个线程循环监测时间也没啥,只不过记得在循环内加上个sleep,哪怕是1ms甚至1us的sleep都可以避免CPU被消耗干净。

如果你所说的接收是死循环式里跑socket.recv,它会在recv里阻塞,按你的说法3分钟一个心跳包,时间检测就成了3分钟一次,不太合适。

更好的办法自然是通过epoll/poll之类的方式或者asyncio/twisted/tornado之类的异步回调/协程加时间事件甚至是各种GUI框架的事件循环来启动你的发送和接收。考虑到以后可能有多设备,显然利用这些成型的玩意更合理。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11249531.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存