【问题标题】:Python Twisted: read from file and send as TCP serverPython Twisted:从文件中读取并作为 TCP 服务器发送
【发布时间】:2015-02-25 22:54:12
【问题描述】:

我对 Twisted 完全陌生,但它看起来对我的项目很有希望。

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

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

有人可以举个例子吗?

谢谢 C

【问题讨论】:

    标签: python network-programming twisted


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      让-保罗,

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

      我的下一步是将 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()
      

      【讨论】:

      • 这应该是一个新问题。我会回答你关于 LoopingCall 和 web 客户端的问题,除了这个小小的评论框里没有太多可以回答的地方;)。
      猜你喜欢
      • 2014-06-22
      • 1970-01-01
      • 2011-01-29
      • 2020-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      相关资源
      最近更新 更多