Python Twisted:从文件读取并作为 TCP 服务器发送

Python Twisted: read from file and send as TCP server

我是 Twisted 的新手,但它看起来非常适合我的项目。

我想编写一个 Python Twisted 应用程序,它每隔 x 秒从文本文件中读取一条记录,并同时监听 TCP 端口(充当 TCP 服务器)。如果没有客户端连接到 TCP 服务器,则记录将被丢弃。如果一个或多个客户端连接到 TCP 服务器,记录将发送到所有客户端(所有客户端将收到同一行文本文件)

Twisted 能否通过合理数量的 LOC 实现这一目标?

有人可以推荐一个例子吗?

谢谢 C

Twisted 的文档包含有关如何 to run a TCP server. It also includes an information about how to perform work based on the passage of time 的信息。这应该涵盖了您需要了解的大部分内容。

让-保罗,

感谢您的回答。 下面是我放在一起的。该程序将带有时间戳的字符串发送到连接到服务器的一个或多个客户端。在这种情况下从文件同步读取非常简单,所以我只使用带有时间戳的固定字符串。

我的下一步是将 datetime.datetime.now() 函数调用替换为对 Web 服务的调用。基本上我想创建的是一种

的代理
  • 客户端与 Web 服务,每 x 秒调用一次以获取数据

  • TCP 服务器与一组客户端连续流式传输数据,或者更好地说一旦新数据块可用(如下例所示)

问题是:

你能给我指出一个类似系统的例子吗?

如何使用 Twisted 的 TCPClient 功能将 runEverySecond() 方法调用与对 Web 服务的异步调用结合起来?

谢谢

C

from twisted.internet import protocol, reactor
from twisted.internet import task
import datetime

class Stream(protocol.Protocol):
    def __init__(self, f):
        self.factory = f

    def connectionMade(self):
        self.start = True

    def forward(self, data):
        if self.start:
            self.transport.write(data)


class StreamFactory(protocol.Factory):
    def __init__(self):
        self.connections = []

    def buildProtocol(self, addr):
        s = Stream(self)
        self.connections.append( s )
        return s

    def runEverySecond(self):
        for c in self.connections:
            c.forward( str(datetime.datetime.now()) )


f = StreamFactory()
l = task.LoopingCall(f.runEverySecond)
l.start(1.0) # call every second
reactor.listenTCP(8000, f)
reactor.run()