0

我正在创建一个应用程序来从多个 iot 设备接收数据每个 iot 设备都有一个套接字服务器,所以我需要创建多套接字客户端我使用 Twisted 库来创建多个套接字客户端问题是我的应用程序无法检测到连接失败并且它不会尝试重新连接

这里是我的代码:

import time
import requests
from twisted.internet.protocol import Protocol, ReconnectingClientFactory as rcf, connectionDone
from twisted.internet import reactor
from twisted.internet.endpoints import TCP4ClientEndpoint
from twisted.python import failure

client_list = [("device ip", device_port)]
endpoints = {}


class Client(Protocol):
    """
    when receive a massage call this function
    """

    def connectionMade(self):
        self.transport.setTcpKeepAlive(True)

    def dataReceived(self, data):
        reactor.callInThread(self._dataReceived, data)

    def _dataReceived(self, data):
        if self.connected == 1:
            data = data[:-1].decode("utf-8")
            data = data.split('\n')
            for tag in data:
                reactor.callInThread(self._push_data, tag, self.transport.addr[0])

    def _push_data(self, data, ip):
        print("start pushing")
        print(data[1:-1])
        try:
            pass
            // send a web request
        except Exception as xp:
            print(xp, end="\n")


class ClientFactory(rcf):
    def buildProtocol(self, addr):
        print(addr, 'Connected.')
        return Client()


if __name__ == "__main__":
    for client in client_list:
        endpoint = TCP4ClientEndpoint(reactor, client[0], client[1])
        endpoints[client] = endpoint
        endpoint.connect(ClientFactory())
    reactor.run()

我写了一些代码来解决这个问题,但这不起作用

import time
import requests
from twisted.internet.protocol import Protocol, ReconnectingClientFactory as clf, connectionDone
from twisted.internet import reactor
from twisted.internet.endpoints import TCP4ClientEndpoint
from twisted.python import failure

client_list = [("device ip", device_port)]
endpoints = {}


class Client(Protocol):
    """
    when receive a massage call this function
    """

    def dataReceived(self, data):
        reactor.callInThread(self._dataReceived, data)

    def _dataReceived(self, data):
        if self.connected == 1:
            data = data[:-1].decode("utf-8")
            data = data.split('\n')
            for tag in data:
                reactor.callInThread(self._push_data, tag, self.transport.addr[0])

    def _push_data(self, data, ip):
        print("start pushing")
        print(data[1:-1])
        try:
            pass
            // send a web request
        except Exception as xp:
            print(xp, end="\n")

    def connectionLost(self, reason: failure.Failure = connectionDone):
        try:
            endpoints.pop(self.transport.addr[0])
        except Exception as xp:
            print(xp)
        print(f"Protocol client {self.transport.addr[0]} connectionLost \n ", reason)
        status = True
        while status:
            try:
                endpoint = TCP4ClientEndpoint(reactor, self.transport.addr[0], 100)
                endpoints[client] = endpoint
                endpoint.connect(ClientFactory())
                status = False
            except Exception as xp:
                print(xp)


class ClientFactory(clf):
    def buildProtocol(self, addr):
        print(addr, 'Connected.')
        return Client()

    def clientConnectionFailed(self, connector, reason):
        print("can't start connect to the server")
        print(reason)
        clf.clientConnectionFailed(self, connector, reason)

    def clientConnectionLost(self, connector, reason):
        print(reason)
        clf.clientConnectionLost(self, connector, reason)


if __name__ == "__main__":
    for client in client_list:
        endpoint = TCP4ClientEndpoint(reactor, client[0], client[1])
        endpoints[client] = endpoint
        endpoint.connect(ClientFactory())
    reactor.run()

我的问题是如何设置检查连接的间隔 ping

4

0 回答 0