def test_high_level_echo(self): data = [] data.append("") data.append("0123456789") data.append("0123456789" * 20) data.append("0123456789" * 2000) data.append("0123456789" * 20000) data.append("0123456789" * 200000) data.append(b"") data.append(b"0123456789") data.append(b"0123456789" * 20) data.append(b"0123456789" * 2000) data.append(b"0123456789" * 20000) data.append(b"0123456789" * 200000) class EchoApplication(WebSocketApplication): def on_open(self): server.logger.info("Connection opened") def on_message(self, message): if message is None: return server.logger.info("Message received %s", len(message)) self.ws.send(message) def on_close(self, reason): server.logger.info("Connection closed %s", reason) server = WebSocketServer(self.s_socket, Resource(OrderedDict([('/', EchoApplication)])), debug=True) server.start() self.server = server try: self.server_thread = Thread(target=self.start_server) self.server_thread.start() ws = create_connection("ws://%s:%s/" % (self.server.environ["SERVER_NAME"], self.server.environ["SERVER_PORT"])) try: for i in range(2): if i == 1: ws.set_mask_key(lambda _: b'1234') for d in data: if isinstance(d, bytes): ws.send_binary(d) else: ws.send(d) self.assertEqual(ws.recv(), d) ws.ping("ping") pong = ws.recv_data_frame(10) self.assertEqual(pong[0], pong[1].OPCODE_PONG) self.assertEqual(pong[1].data, b'ping') self.assertFalse(self.err) finally: ws.close(timeout=10) finally: server.close()
def run_forever(self, host='0.0.0.0', debug=False): try: dealer_server = WebSocketServer( (host, 8080), Resource(OrderedDict({'/': DealerApplication})), debug=debug) dealer_server.serve_forever() except KeyboardInterrupt: dealer_server.close() raise KeyboardInterrupt
def run_forever(self, host='0.0.0.0', debug=False): try: dealer_server = WebSocketServer( (host, 8080), Resource(OrderedDict({'/': DealerApplication})), debug=debug) dealer_server.serve_forever() except KeyboardInterrupt: dealer_server.close() raise KeyboardInterrupt
# Catch SIGNTERM and signal.signal(signal.SIGINT, signalCatch) signal.signal(signal.SIGTERM, signalCatch) # Init the sync application wsInit(verbose) # Start the Redis thread try: if verbose: print('Starting the Redis thread') thread = threading.Thread(target=redisThread) thread.daemon = True thread.start() except Exception as e: print('Failed to start Redis thread: %s' % str(e)) # Get the host and port dConf = Conf.get('websocket', {"host": "0.0.0.0", "port": 8001}) # Create the websocket server if verbose: print('Starting the WebSocket server') server = WebSocketServer((dConf['host'], dConf['port']), Resource(OrderedDict([('/', SyncApplication)]))) try: server.serve_forever() except KeyboardInterrupt: pass server.close()
try: msg = os.tp_read(self.tuntap.fd, 1500) if not msg: break except IOError: break if self.ws.closed: break self.ws.send(msg, True) def on_open(self): self.reader = gevent.spawn(self.read_fd) def on_close(self, reason): if (hasattr(self, 'reader')): self.reader.kill() def on_message(self, msg): if not msg: return os.tp_write(self.tuntap.fd, msg) if __name__ == "__main__": server.tuntap = tuntap.tuntap(args.tuntap) wss = WebSocketServer((args.src, args.port), Resource({args.loc: server})) try: wss.serve_forever() except KeyboardInterrupt: wss.close()