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

时间:2015-02-25 22:54:13

标签: python network-programming twisted

我对Twisted来说是全新的,但对我的项目来说看起来很有希望。

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

可以使用合理数量的LOC使Twisted成为可能吗?

有人可以建议一个例子吗?

由于 ç

2 个答案:

答案 0 :(得分:2)

Twisted的文档包含有关to run a TCP server的方式的信息。它还包含有关to perform work based on the passage of time的信息。这应涵盖您需要了解的大部分内容。

答案 1 :(得分:1)

让保,

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

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

  • 客户端与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()