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 回答