1

我做了一个像 SomeClient 这样的客户端,它与 WAMP v1 服务器通信。

正如您在第 25 行所见,我无法做的是从 HTTPServer 类调用 SomeClient.i_need_to_call_this 方法。

from twisted.internet import reactor
from twisted.web import server, resource
from autobahn.wamp1.protocol import WampClientFactory, WampCraClientProtocol
from autobahn.twisted.websocket import connectWS

class SomeClient(WampCraClientProtocol):
    def __init__(self):
        pass

    def doSomething(self, something):
        return something

    def i_need_to_call_this(self):
        d = self.call("http://somewhere")
        d.addCallback(self.doSomething)



class HTTPServer(resource.Resource):
    isLeaf = True

    def render_GET(self, request):
        request.setHeader("content-type", "application/json")
        result = "Here i need to call SomeClient.i_need_to_call_this and render the result"
        return result


if __name__ == '__main__':
    factory = WampClientFactory("wss://someurl")
    factory.protocol = SomeClient
    connectWS(factory)
    reactor.listenTCP(8080, server.Site(HTTPServer()))
    reactor.run()
4

1 回答 1

1

这样做的典型习惯用法是维护一个实例变量factory.proto,该变量将被初始化,None然后由连接的协议填充到协议本身。

通过factory从您想要发出 WAMP 调用的任何地方通过引用获得 then,您可以使用factory.proto. 您需要通过 保护这些用途if factory.proto ..,因为在没有连接时您不能使用客户端协议实例。

于 2014-07-29T22:19:35.147 回答