twisted.protocols.basic.LineReceiver和twisted.internet.protocol.Protocol之间有什么区别?

3

对于一个典型的客户端-服务器应用程序,它们之间如何不同。具体来说,基于行的协议有什么特殊之处?更好的是,什么时候类必须继承自 Protocol,什么时候必须继承自 LineReceiver


1
除了显而易见的答案之外,你还期望得到什么?LineReceiverProtocol之间的区别在于前者声明了lineReceived()/sendLine()方法(以及相关功能),这样你就可以避免在每个协议中重新实现接收/发送行的过程。 - jfs
1个回答

6

差异在于接收数据的处理方式。

协议具有dataReceived函数。每当接收到数据时,它都会被调用。

LineReceiver覆盖了Protocol。它实现了一种基本的消息格式,即使用“\r\n”分隔的消息。

让我们假设服务器编写的消息如下:

request.write("Lorem ipsum")
request.write("do amet siempre.\r\n")
request.write("We have Drogba!\r\n")

使用实现协议的客户端接收到消息;

def dataReceived(self, data):
   print data
.
.
output:

Lorem ipsum
do amet siempre.
We have Drogba!

使用LineReceiver实现,在客户端接收到消息。

def lineReceived(self, line):
   print line
.
.
output: 
Lorem ipsum do amet siempre.
We have Drogba!

希望这个能对你有所帮助。如果需要更多信息,可以查看参考资料或进行评论提问。


1
请求.write("德罗巴在这里发生了什么") - ayyayyekokojambo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接