【问题标题】:Application of Twisted Python in TCP/IP connections?Twisted Python 在 TCP/IP 连接中的应用?
【发布时间】:2015-08-07 23:18:17
【问题描述】:

我正在写一个客户端,它需要建立几个独立的通信通道,每个通道在服务器上都有自己唯一的端口,通过一系列的发送和接收消息与一个服务器。我知道如何使用套接字发送和接收来做到这一点,通过给每个通信通道一个套接字,并在该套接字上发送和接收。我需要在 Twisted 中完成这项工作,并找到了可能有用的接口,包括 Factory 和 ProcessProtocol。但是,协议接口不提供发送消息的方法。 ProcessProtocol 是否适合我的任务,以及如何使 ProcessProtocol 发送消息?

【问题讨论】:

  • 我不知道你在这里问什么。你只是想发送数据吗?您需要离散的消息边界吗?您已经阅读了哪些文档?您是否通过 Twisted 教程?

标签: python sockets tcp twisted


【解决方案1】:

如果您不知道,我想向优秀的Twisted finger tutorial 大声疾呼,它以良好的速度通过图书馆,但有足够的细节让您知道发生了什么。

不过,要直接回答您的问题,我想说您在协议和(客户端)工厂方面处于正确的轨道上。我认为做你正在寻找的最干净的方法(假设你需要连接到不同的端口,因为它们是不同数据的输出)是为你想要连接/处理的每​​个端口制作一个工厂/协议对,然后使用外部类来处理聚合所有这些的应用程序逻辑。通常,您不希望您的应用程序逻辑与您的网络逻辑深度混合。

一个简单的例子:(注意使用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()

您可能还想查看'Writing Clients' docs on the Twisted site

【讨论】:

    猜你喜欢
    • 2013-01-11
    • 1970-01-01
    • 2015-02-27
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 2022-08-08
    • 2010-09-15
    • 2021-10-28
    相关资源
    最近更新 更多