2013-06-25 41 views
1

我想寫一個代理與高速公路和扭曲。當一個websocket客戶端連接時,我想打開一個到服務器的TCP連接。我似乎無法弄清楚的是如何將通過TCP連接接收到的數據傳遞迴websocket客戶端。Websocket/TCP代理與高速公路和扭曲

#!/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() 

回答

0

在WSServerProtocol類,在onMessage螺紋:

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