gpt4 book ai didi

python - 用于允许断开连接的仅发送协议(protocol)的扭曲客户端

转载 作者:太空宇宙 更新时间:2023-11-04 06:30:05 24 4
gpt4 key购买 nike

我决定在 twisted 的帮助下涉足异步 python 的世界。我已经实现了文档中的一些示例,但我很难找到我正在尝试编写的非常简单的客户端示例。

简而言之,我想要一个与服务器建立 tcp 连接的客户端,然后从队列对象向服务器发送简单的“\n”终止字符串消息。服务器永远不会响应任何消息,因此我的客户端是完全单向的。我/认为/我想要的是 this example 的某种组合和 twisted.internet.protocols.basic.LineReceiver 便利协议(protocol)。感觉这应该是一个人可以在扭曲中做的最简单的事情,但我在网上看到的文档或示例似乎都不太合适。

最佳答案

我所做的不是使用队列,而是说明在建立连接后发送线路的代码。有大量打印资料可以帮助您了解正在发生的事情。

通常的导入内容:

from twisted.web import proxy
from twisted.internet import reactor
from twisted.internet import protocol
from twisted.internet.protocol import ReconnectingClientFactory
from twisted.protocols import basic
from twisted.python import log
import sys
log.startLogging(sys.stdout)

您创建一个从行接收器派生的协议(protocol),设置分隔符。在这种情况下,一旦建立连接,我就简单地写一个字符串“www”。关键是查看 twisted.internet.interface.py 上的协议(protocol)接口(interface),了解协议(protocol)的各种方法以及它们的作用和调用时间。

class MyProtocol(basic.LineReceiver):

#def makeConnection(self, transport):
# print transport

def connectionLost(self, reason):
print reason
self.sendData = False

def connectionMade(self):
print "connection made"
self.delimiter = "\n"
self.sendData = True
print self.transport
self.sendFromQueue()

def sendFromQueue(self):
while self.sendData:
msg = dataQueue.get()
self.sendLine(msg)
# you need to handle empty queue
# Have another function to resume

最后,一个协议(protocol)工厂将为每个连接创建一个协议(protocol)实例。查看方法:buildProtcol。

class myProtocolFactory():
protocol = MyProtocol

def doStart(self):
pass

def startedConnecting(self, connectorInstance):
print connectorInstance

def buildProtocol(self, address):
print address
return self.protocol()

def clientConnectionLost(self, connection, reason):
print reason
print connection

def clientConnectionFailed(self, connection, reason):
print connection
print reason

def doStop(self):
pass

现在您使用连接器进行连接:

reactor.connectTCP('localhost', 50000, myProtocolFactory())
reactor.run()

我运行了这个并将它连接到一个服务器,该服务器只打印它接收到的内容,因此不发送任何确认。这是输出:

1286906080.08   82     INFO 140735087148064 __main__ conn_made: client_address=127.0.0.1:50277
1286906080.08 83 DEBUG 140735087148064 __main__ created handler; waiting for loop
1286906080.08 83 DEBUG 140735087148064 __main__ handle_read
1286906080.08 83 DEBUG 140735087148064 __main__ after recv
'www\n'

Recieved: 4

上面的例子如果不是容错的。要重新连接,当连接丢失时,您可以从现有的扭曲类 - ReconnectingClientFactory 派生协议(protocol)工厂。Twisted 几乎拥有您需要的所有工具:)

class myProtocolFactory(ReconnectingClientFactory):
protocol = MyProtocol

def buildProtocol(self, address):
print address
return self.protocol()

For further reference

我建议您阅读:http://krondo.com/?page_id=1327

[编辑:根据下面的评论]

关于python - 用于允许断开连接的仅发送协议(protocol)的扭曲客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3917382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com