title: How to forward a websocket server in localhost with ngrok
body: <p>I' trying to run a websocket server on local host and forward it to web using ngrok. But couldn't figure it how. These are the original code's from AutobahnPython git repository <a href="https://github.com/tavendo/AutobahnPython" rel="noreferrer">https://github.com/tavendo/AutobahnPython</a>.</p>
  
  <p>Server code:</p>
  
  <pre><code>from autobahn.twisted.websocket import WebSocketServerProtocol, \
                                         WebSocketServerFactory
  
  
  class MyServerProtocol(WebSocketServerProtocol):
  
     def onConnect(self, request):
        print("Client connecting: {0}".format(request.peer))
  
     def onOpen(self):
        print("WebSocket connection open.")
  
     def onMessage(self, payload, isBinary):
        if isBinary:
           print("Binary message received: {0} bytes".format(len(payload)))
        else:
           print("Text message received: {0}".format(payload.decode('utf8')))
  
        ## echo back message verbatim
        self.sendMessage(payload, isBinary)
  
     def onClose(self, wasClean, code, reason):
        print("WebSocket connection closed: {0}".format(reason))
  
  
  
  if __name__ == '__main__':
  
     import sys
  
     from twisted.python import log
     from twisted.internet import reactor
  
     log.startLogging(sys.stdout)
  
     factory = WebSocketServerFactory("ws://localhost:9000", debug = False)
     factory.protocol = MyServerProtocol
  
     reactor.listenTCP(9000, factory)
     reactor.run()
  </code></pre>
  
  <p>Client Code:</p>
  
  <pre><code>from autobahn.twisted.websocket import WebSocketClientProtocol, \
                                         WebSocketClientFactory
  
  
  
  class MyClientProtocol(WebSocketClientProtocol):
  
     def onConnect(self, response):
        print("Server connected: {0}".format(response.peer))
  
     def onOpen(self):
        print("WebSocket connection open.")
  
        def hello():
           self.sendMessage(u"Hello, world!".encode('utf8'))
           self.sendMessage(b"\x00\x01\x03\x04", isBinary = True)
           self.factory.reactor.callLater(1, hello)
  
        ## start sending messages every second ..
        hello()
  
     def onMessage(self, payload, isBinary):
        if isBinary:
           print("Binary message received: {0} bytes".format(len(payload)))
        else:
           print("Text message received: {0}".format(payload.decode('utf8')))
  
     def onClose(self, wasClean, code, reason):
        print("WebSocket connection closed: {0}".format(reason))
  
  
  
  if __name__ == '__main__':
  
     import sys
  
     from twisted.python import log
     from twisted.internet import reactor
  
     log.startLogging(sys.stdout)
  
     factory = WebSocketClientFactory("ws://localhost:9000", debug = False)
     factory.protocol = MyClientProtocol
  
     reactor.connectTCP("127.0.0.1", 9000, factory)
     reactor.run()
  </code></pre>
  
  <p>This is the changed code:</p>
  
  <pre><code>from autobahn.twisted.websocket import WebSocketClientProtocol, \
                                         WebSocketClientFactory
  
  
  
  class MyClientProtocol(WebSocketClientProtocol):
  
     def onConnect(self, response):
        print("Server connected: {0}".format(response.peer))
  
     def onOpen(self):
        print("WebSocket connection open.")
  
        def hello():
           self.sendMessage(u"Hello, world!".encode('utf8'))
           self.sendMessage(b"\x00\x01\x03\x04", isBinary = True)
           self.factory.reactor.callLater(1, hello)
  
        ## start sending messages every second ..
        hello()
  
     def onMessage(self, payload, isBinary):
        if isBinary:
           print("Binary message received: {0} bytes".format(len(payload)))
        else:
           print("Text message received: {0}".format(payload.decode('utf8')))
  
     def onClose(self, wasClean, code, reason):
        print("WebSocket connection closed: {0}".format(reason))
  
  
  
  if __name__ == '__main__':
  
     import sys
  
     from twisted.python import log
     from twisted.internet import reactor
  
     log.startLogging(sys.stdout)
  
     #~ factory = WebSocketClientFactory("ws://localhost:9000", debug = False)
     factory = WebSocketClientFactory("ws://ngrok.com:xxxxx", debug = False)
  
     factory.protocol = MyClientProtocol
  
     reactor.connectTCP("ws://ngrok.com", xxxxx, factory)
     reactor.run()
  </code></pre>
  
  <p>This is the ngrok command: <strong>./ngrok -proto=tcp 9000</strong></p>
  
  <p>What am I doing wrong here?</p>