簡體   English   中英

Python Twisted:從文件讀取並作為TCP服務器發送

[英]Python Twisted: read from file and send as TCP server

我對Twisted來說是全新的,但對我的項目看起來非常有希望。

我想編寫一個Python Twisted應用程序,它每隔x秒從文本文件中讀取一條記錄,並在TCP端口(充當TCP服務器)上進行當代偵聽。 如果沒有客戶端連接到TCP服務器,則只丟棄記錄。 如果一個或多個客戶端連接到TCP服務器,則記錄將發送到所有客戶端(所有客戶端將接收文本文件的同一行)

Can Twisted可以通過合理數量的LOC實現這一目標嗎?

任何人都可以提出一個例子嗎?

謝謝C.

Twisted的文檔包含有關如何運行TCP服務器的信息 它還包括有關如何根據時間推移執行工作的信息。 這應該涵蓋您需要知道的大部分內容。

讓 - 保羅,

感謝您的回答。 以下是我整理的內容。 該程序將帶有時間戳的字符串發送到連接到服務器的一個或多個客戶端。 在這種情況下從文件同步讀取非常簡單,所以我只使用帶有時間戳的固定字符串。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM