繁体   English   中英

Twisted Python在TCP / IP连接中的应用?

[英]Application of Twisted Python in TCP/IP connections?

我正在编写一个客户端,该客户端需要建立几个独立的通信通道,每个通道在服务器上具有自己的唯一端口,并通过一系列发送和接收消息与服务器建立连接。 我知道如何使用套接字发送和接收来实现此目的,方法是为每个通信通道分配一个套接字,并在该套接字上进行发送和接收。 我需要在Twisted中进行这项工作,并找到了可能有用的接口,包括Factory和ProcessProtocol。 但是,协议接口不提供发送消息的方法。 ProcessProtocol是执行任务的理想选择吗?如何使ProcessProtocol发送消息?

如果您不了解它,我想向优秀的Twisted finger教程大喊大叫,该教程以不错的速度通过了库,但是提供了足够的详细信息,您知道正在发生的事情。

但是,要直接回答您的问题,我想说您在Protocol和(Client)Factory方面是正确的。 我认为做您要寻找的东西的最干净的方法(假设您需要连接到不同的端口,因为它们是不同数据的输出)将为您要连接/处理的每​​个端口建立一个工厂/协议对,然后使用外部类来处理将所有逻辑汇总在一起的应用程序逻辑。 通常,您不希望您的应用程序逻辑与网络逻辑深入融合。

一个简单的例子:(注意使用self.transport.write发送数据)

from twisted.internet.protocol import Protocol, ClientFactory
from sys import stdout

from foobar_application import CustomAppObject

class FooProtocol(Protocol):
    def connectionMade(self):
        # Use self.transport.write to send data to the server
        self.transport.write('Hello server this is the Foo protocol.')
        self.factory.do_app_logic()

class FooFactory(ClientFactory):
    protocol = FooProtocol

    def __init__(self, app_object=None):
        self.app = app_object

    def do_app_logic(self):
        self.app.do_something()

class BarProtocol(Protocol):
    def dataReceived(self, data):
        stdout.write('Received data from server using the Bar protocol.')
        self.factory.do_fancy_logic(data)

class BarFactory(ClientFactory):
    protocol = BarProtocol

    def __init__(self, app_object=None):
        self.app = app_object

    def do_fancy_logic(self, data):
        self.app.do_something_else(data)

logic_obj = CustomAppObject()
reactor.listenTCP(8888, FooFactory(app_object=logic_obj)
reactor.listenTCP(9999, BarFactory(app_object=logic_obj)
reactor.run()

您可能还需要查看Twisted网站上的“ Writing Clients”文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM