首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Twisted -如何创建多协议进程并在协议之间发送数据

Twisted -如何创建多协议进程并在协议之间发送数据
EN

Stack Overflow用户
提问于 2010-03-27 02:08:29
回答 3查看 4.1K关注 0票数 1

我正在尝试编写一个程序,该程序将在某个端口(例如tcp 6666)上侦听数据(简单的文本消息),然后将它们传递给一个或多个不同的协议- irc、xmpp等。我尝试了很多方法,在互联网上挖掘,但我找不到简单有效的解决方案来完成这项任务。

我目前使用的代码是:http://pastebin.com/ri7caXih

我想知道如何从像这样的对象:

ircf = ircFactory('asdfasdf','#asdf666')

获取对自身协议方法的访问,因为这是:

味精(self.protocol.dupa1)

返回未将self传递给活动协议对象的错误。或者,也许有其他更好、更简单、更纯洁的方法来创建具有多个协议的单个反应器,并在消息到达其中任何一个协议时触发操作,然后将该消息传递到其他协议以进行处理/处理/发送?

任何帮助我们都将不胜感激!

EN

回答 3

Stack Overflow用户

发布于 2011-05-03 11:15:54

下面是从端口9001的多个连接读取并写入端口9000上的连接的示例代码。您将需要多个"PutLine“实现,其中一个用于XMPP、IRC、MSN等。

我使用全局变量来存储输出连接PutLine,但是您可能希望创建一个更复杂的工厂对象来处理这个问题。

代码语言:javascript
复制
#!/usr/bin/env python

from twisted.internet.protocol import Protocol, Factory
from twisted.internet.endpoints import clientFromString, serverFromString
from twisted.protocols.basic import LineReceiver
from twisted.internet import reactor

queue = []
putter = None

class GetLine(LineReceiver):
    delimiter = '\n'

    def lineReceived(self, line):
        queue.append(line)
        putter.have_data()
        self.sendLine(line)

class PutLine(LineReceiver):
    def __init__(self):
        global putter
        putter = self
        print 'putline init called %s' % str(self)

    def have_data(self):
        line = queue.pop()
        self.sendLine(line)


def main():
    f = Factory()
    f.protocol = PutLine
    endpoint = clientFromString(reactor, "tcp:host=localhost:port=9000")
    endpoint.connect(f)
    f = Factory()
    f.protocol = GetLine
    endpoint2 = serverFromString(reactor, "tcp:port=9001")
    endpoint2.listen(f)
    reactor.run()

if __name__ == '__main__':
    main()

测试:

代码语言:javascript
复制
nc -l  9000
python test.py
nc 9001

从任意数量的nc 9001 (或netcat 9001)输入的数据将出现在nc -l 9000上。

票数 5
EN

Stack Overflow用户

发布于 2010-03-27 17:33:25

这个问题在常见问题解答中得到了回答。

http://twistedmatrix.com/trac/wiki/FrequentlyAskedQuestions#HowdoImakeinputononeconnectionresultinoutputonanother

票数 3
EN

Stack Overflow用户

发布于 2010-03-27 02:31:11

参见doc/core/examples/chatserver.py。在那里,它们向ProtocolconnectionMadeconnectionLost方法添加了钩子,以维护已连接客户端的列表,然后当消息到达传递时,它将遍历所有这些客户端。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2525644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档