1

アウトバーンとツイストでプロキシを作成しようとしています。Websocket クライアントが接続するときに、サーバーへの TCP 接続を開きたいです。私が理解できないように見えるのは、TCP接続を介して受信したデータをwebsocketクライアントに戻す方法です。

#!/usr/bin/env python

from twisted.internet.protocol import ClientFactory
from twisted.protocols.basic import Int32StringReceiver
from twisted.internet import reactor
from twisted.python import log
from autobahn.websocket import WebSocketServerFactory, \
                               WebSocketServerProtocol, \
                               listenWS
import sys

class ServerClient(Int32StringReceiver):
    structFormat = "!I"

    def __init__(self):
        self.filter = "{\"exporterip\": \"1.2.3.4\"}"

    def connectionMade(self):
        self.sendString(self.filter)

    def stringReceived(self, string):
        print "Received data %s" % (string)

class ServerClientFactory(ClientFactory):
    protocol = ServerClient

    def clientConnectionFailed(self, connector, reason):
        print 'connection failed:', reason.getErrorMessage()
        reactor.stop()

    def clientConnectionLost(self, connector, reason):
        print 'connection lost:', reason.getErrorMessage()
        reactor.stop()

class WSServerProtocol(WebSocketServerProtocol):

def onOpen(self):
    print "Websocket connection opened"
    tcpfactory = ServerClientFactory()
    reactor.connectTCP('localhost', 9876, tcpfactory)

def onClose(self):
    print "Websocket connection closed"

def onMessage(self, msg, binary):
    print "Websocket message received"

def main():
    log.startLogging(sys.stdout)

    wsfactory = WebSocketServerFactory("ws://localhost:9000", debug = False)
    wsfactory.protocol = WSServerProtocol
    listenWS(wsfactory)

    reactor.run()

if __name__ == '__main__':
    main()
4

1 に答える 1

0

WSServerProtocol クラスの onMessage スレッドで:

def onMessage(self, msg, binary):
    self.sendMessage(msg)
于 2014-01-13T22:56:07.200 に答える