Пример #1
0
def serve_wsgi(host, port, app, quiet=False):
    server = WSGIServer((host, port), app, handler_class=WebSocketHandler)
    if not quiet:
        server.logger = create_logger('geventwebsocket.logging')
        server.logger.setLevel(logging.INFO)
        server.logger.addHandler(logging.StreamHandler())
    server.logger.info(f'Listening on http://{host}:{port}/\nHit Ctrl-C to quit.\n')
    server.serve_forever()
Пример #2
0
    def test_low_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)

        def test_echo_actual(environ, start_response):
            try:
                websocket = environ.get("wsgi.websocket")

                if websocket is None:
                    return http_handler(environ, start_response)

                while True:
                    message = websocket.receive()
                    if message is None:
                        break
                    websocket.send(message)
                websocket.close()
            except Exception as e:
                self.err.append(e)

        server = WSGIServer(self.s_socket, application=test_echo_actual, handler_class=TestWebSocketHandler)
        server.logger = getLogger(__name__)
        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')

                    ping = ws.recv_data_frame(9)
                    self.assertEqual(ping[0], ping[1].OPCODE_PING)
                    self.assertEqual(ping[1].data, b'')
                    ws.pong(ping[1].data)

                    ping = ws.recv_data_frame(9)
                    self.assertEqual(ping[0], ping[1].OPCODE_PING)
                    self.assertEqual(ping[1].data, b'')
                    ws.pong(ping[1].data)

                    ping = ws.recv_data_frame(9)
                    self.assertEqual(ping[0], ping[1].OPCODE_PING)
                    self.assertEqual(ping[1].data, b'ping')
                    ws.pong(ping[1].data)

                    ping = ws.recv_data_frame(9)
                    self.assertEqual(ping[0], ping[1].OPCODE_PING)
                    self.assertEqual(ping[1].data, b'ping')
                    ws.pong(ping[1].data)

                    self.assertFalse(self.err)
            finally:
                ws.close(timeout=10)
        finally:
            server.close()