【发布时间】:2014-01-27 17:54:56
【问题描述】:
我想实现一个自己的基于 TCP 的协议,以便在 Twisted 之上的服务器中使用。这种协议实现的机制很明确(从 Protocol 继承并覆盖四个继承的方法,构建 Factory)。
但是,我希望我的协议与应用程序逻辑分开,以这样的方式:
协议:从客户端接收数据,解码字节流并填充 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 内创建一个逻辑实例。放在那里好吗?
【问题讨论】:
-
到目前为止你得到了什么?
-
process是使用任何库的任何语言中最糟糕的方法名称之一。 -
@Jean-PaulCalderone:同意,请原谅我在此示例上下文中使用它。