| 1 | |
|---|
| 2 | |
|---|
| 3 | |
|---|
| 4 | """ |
|---|
| 5 | WebSocket example: echo service. |
|---|
| 6 | |
|---|
| 7 | This creates a simple echo WebSocket example, accessible on |
|---|
| 8 | http://localhost:8080/ with a browser supporting WebSocket. |
|---|
| 9 | """ |
|---|
| 10 | |
|---|
| 11 | import sys |
|---|
| 12 | |
|---|
| 13 | from twisted.python import log |
|---|
| 14 | from twisted.internet import reactor |
|---|
| 15 | from twisted.web.websocket import WebSocketHandler, WebSocketSite |
|---|
| 16 | from twisted.web.resource import Resource |
|---|
| 17 | |
|---|
| 18 | |
|---|
| 19 | |
|---|
| 20 | class Echohandler(WebSocketHandler): |
|---|
| 21 | |
|---|
| 22 | def frameReceived(self, frame): |
|---|
| 23 | log.msg("Received frame '%s'" % frame) |
|---|
| 24 | self.transport.write(frame) |
|---|
| 25 | |
|---|
| 26 | |
|---|
| 27 | |
|---|
| 28 | class ExampleResource(Resource): |
|---|
| 29 | |
|---|
| 30 | def getChildWithDefault(self, path, request): |
|---|
| 31 | if not path: |
|---|
| 32 | return self |
|---|
| 33 | return Resource.getChildWithDefault(self, path, request) |
|---|
| 34 | |
|---|
| 35 | |
|---|
| 36 | def render_GET(self, request): |
|---|
| 37 | return """<html> |
|---|
| 38 | <head> |
|---|
| 39 | <title>WebSocket example: echo service</title> |
|---|
| 40 | </head> |
|---|
| 41 | <body> |
|---|
| 42 | <h1>WebSocket example: echo service</h1> |
|---|
| 43 | <script type="text/javascript"> |
|---|
| 44 | var ws = new WebSocket("ws://127.0.0.1:8080/ws/echo"); |
|---|
| 45 | ws.onmessage = function(evt) { |
|---|
| 46 | var data = evt.data; |
|---|
| 47 | var target = document.getElementById("received"); |
|---|
| 48 | target.value = target.value + data; |
|---|
| 49 | }; |
|---|
| 50 | window.send_data = function() { |
|---|
| 51 | ws.send(document.getElementById("send_input").value); |
|---|
| 52 | }; |
|---|
| 53 | </script> |
|---|
| 54 | <form> |
|---|
| 55 | <label for="send_input">Text to send</label> |
|---|
| 56 | <input type="text" name="send_input" id="send_input"/> |
|---|
| 57 | <input type="submit" name="send_submit" id="send_submit" value="Send" |
|---|
| 58 | onclick="send_data(); return false"/> |
|---|
| 59 | <br /> |
|---|
| 60 | <label for="received">Received text</label> |
|---|
| 61 | <textarea name="received" id="received"></textarea> |
|---|
| 62 | </form> |
|---|
| 63 | </body> |
|---|
| 64 | </html>""" |
|---|
| 65 | |
|---|
| 66 | |
|---|
| 67 | |
|---|
| 68 | def main(): |
|---|
| 69 | log.startLogging(sys.stdout) |
|---|
| 70 | root = ExampleResource() |
|---|
| 71 | site = WebSocketSite(root) |
|---|
| 72 | site.addHandler("/ws/echo", Echohandler) |
|---|
| 73 | reactor.listenTCP(8080, site) |
|---|
| 74 | reactor.run() |
|---|
| 75 | |
|---|
| 76 | |
|---|
| 77 | |
|---|
| 78 | if __name__ == "__main__": |
|---|
| 79 | main() |
|---|