我想實現一個自己的基於TCP的協議,用於Twisted之上的服務器。這種協議實現的機制很明確(繼承協議並覆蓋四個繼承的方法,建立Factory)。Python扭曲:從處理中分離協議
但是,我想我的協議爲從應用邏輯分離的,在一種方式:
協議:從客戶端接收數據時,字節流進行解碼,並填充Python數據結構,需要的數據結構,編碼對字節流(基於文本的)並響應客戶
應用邏輯:接收所述數據結構,計算和返回響應的數據結構
我該如何構建一個Twisted應用程序,它既不依賴於其他(即,鬆耦合)?我會想象協議類將被實例化一個應用程序邏輯回調作爲參數?
編輯:
在此期間,我有這樣的:
from twisted.internet.protocol import Protocol
from twisted.internet.protocol import Factory
from twisted.internet.endpoints import TCP4ServerEndpoint
from twisted.internet import reactor
class Logic:
def process(self, data):
return "Processed: %s" % data
class LineProtocol(Protocol):
def dataReceived(self, data):
print "Received: %s" % data
if self.factory._logic_callback:
ret = self.factory._logic_callback.process(data)
print "Sent: %s" % ret
self.transport.write(ret)
class LineFactory(Factory):
protocol = LineProtocol
def __init__(self, logic_callback = None):
if logic_callback:
self._logic_callback = logic_callback()
else:
self._logic_callback = None
endpoint = TCP4ServerEndpoint(reactor, 1234)
endpoint.listen(LineFactory(Logic))
reactor.run()
你會認爲這是在 「扭曲」 的方式?任何需要改進的地方?
該代碼在LineFactory內創建一個Logic實例。很好把它放在那裏?
到目前爲止你有什麼? – SingleNegationElimination
「進程」是任何語言中使用任何庫的方法最糟糕的名稱之一。 –
@ Jean-PaulCalderone:同意,請原諒我在這個示例中使用它。 – Bernd