Websocket/TCP代理,带有高速公路和扭曲



我正在尝试用autobahn和twisted编写一个代理。当一个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()

在您的WSServerProtocol类中,在onMessage线程中:

def onMessage(self, msg, binary):
    self.sendMessage(msg)

最新更新