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()