我想实现一个自己的基于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