コード例 #1
0
class LogViewWorker(EntityWorker):
    def __init__(self, config_address, entity_port, http_port, ws_port):
        """
        :param config_address:  config进程的监听地址
        :param entity_port:     entity的服务接口
        :param http_port:       http的监听端口
        :param ws_port:         websocket的监听端口
        :return:
        """
        EntityWorker.__init__(self, "log_view", "log_view", entity_port, config_address)
        self._http_port = http_port
        self._ws_port = ws_port
        self._ws_server = None
        self._http_server = None

        global WS_PORT
        WS_PORT = ws_port

    def init_entity(self):
        self._ws_server = WebSocketServer(
            ('', self._ws_port),
            Resource(OrderedDict({"/": LogWebSocket}))
        )
        self._ws_server.start()

        self._http_server = HttpConnector(self._http_port)
        self._http_server.add_route("/showlog", ShowLog)
        self._http_server.add_route("/greplog", GrepLog)
        self._http_server.add_route("/nodes", AllNode)
        self._http_server.add_route("/nodemanage", NodeManage)
        self._http_server.add_route("/addnode", AddNode)
        self._http_server.add_route("/delnode", DelNode)
        self._http_server.start()

        WebSocketManager()
コード例 #2
0
    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()
コード例 #3
0
def server():
    s = WebSocketServer(('0.0.0.0', 8001),
                        Resource(OrderedDict([('/', TestApplication)])))
    s.start()
    thread = Greenlet.spawn(s.serve_forever)
    yield s
    s.stop()
    thread.kill()
コード例 #4
0
ファイル: test_websockets.py プロジェクト: noisyboiler/wampy
def server():
    s = WebSocketServer(
        ('0.0.0.0', 8001),
        Resource(OrderedDict([('/', WsApplication)]))
    )
    s.start()
    thread = Greenlet.spawn(s.serve_forever)
    yield s
    s.stop()
    thread.kill()
コード例 #5
0
ファイル: xmas.py プロジェクト: JonasRSV/ChristmasGame
def main():
    xmas = WebSocketServer(
        ('0.0.0.0', 8000),
        Resource(
            OrderedDict([('/xmas', client.ClientImpl),
                         ('/interface', interface.InterfaceImpl)])))

    application_state = State()
    application_gui = gui.GuiImpl(application_state,
                                  santa.GaOptimizingSanta(application_state))
    """ So that interface can update the packages aswell. """
    application_state.add_package = application_gui.add_package
    """ Make state reachable throughout all applications """
    xmas.state = application_state

    try:
        application_gui.start()
        xmas.start()
        xmas.serve_forever()
    except KeyboardInterrupt:
        pass

    application_state.clean()
    application_gui.stop()
コード例 #6
0
add_peers(PEERS)

from gevent.pywsgi import WSGIServer

apiserver = WSGIServer(('', API_PORT), apiapp)
apiserver.start()

from geventwebsocket import WebSocketServer, WebSocketApplication, Resource
from collections import OrderedDict


class P2PApplication(WebSocketApplication):
    def on_open(self):
        # 被连接时客户端会立刻把自己的最新块发过来,
        # 所以无需给对端发送自己的最新区块。
        peers.append(Peer(self.ws))

    def on_message(self, message):
        chain.handle_msg(message, self.ws)

    def on_close(self, reason):
        pass


resource = Resource(OrderedDict([('/', P2PApplication)]))
p2pserver = WebSocketServer(('', P2P_PORT), resource)
p2pserver.start()

while True:
    gevent.sleep(60)
コード例 #7
0
class APIServer():

    _api_prefix = '/api/1'

    def __init__(
        self,
        rest_api: RestAPI,
        ws_notifier: RotkiNotifier,
        cors_domain_list: List[str] = None,
    ) -> None:
        flask_app = Flask(__name__)
        if cors_domain_list:
            CORS(flask_app, origins=cors_domain_list)
        blueprint = create_blueprint()
        flask_api_context = Api(blueprint, prefix=self._api_prefix)
        setup_urls(
            flask_api_context=flask_api_context,
            rest_api=rest_api,
            urls=URLS_V1,
        )

        self.rest_api = rest_api
        self.rotki_notifier = ws_notifier
        self.flask_app = flask_app
        self.blueprint = blueprint

        self.wsgiserver: Optional[WSGIServer] = None
        self.flask_app.register_blueprint(self.blueprint)
        self.ws_server: Optional[WebSocketServer] = None

        self.flask_app.errorhandler(HTTPStatus.NOT_FOUND)(
            endpoint_not_found)  # type: ignore
        self.flask_app.register_error_handler(
            Exception, self.unhandled_exception)  # type: ignore

    @staticmethod
    def unhandled_exception(exception: Exception) -> Response:
        """ Flask.errorhandler when an exception wasn't correctly handled """
        log.critical(
            'Unhandled exception when processing endpoint request',
            exc_info=True,
            exception=str(exception),
        )
        return api_response(wrap_in_fail_result(str(exception)),
                            HTTPStatus.INTERNAL_SERVER_ERROR)

    def run(self,
            host: str = '127.0.0.1',
            port: int = 5042,
            **kwargs: Any) -> None:
        """This is only used for the data faker and not used in production"""
        self.flask_app.run(host=host, port=port, **kwargs)

    def start(
        self,
        host: str = '127.0.0.1',
        rest_port: int = 5042,
        websockets_port: int = 5043,
    ) -> None:
        """This is used to start the API server in production"""
        wsgi_logger = logging.getLogger(__name__ + '.pywsgi')
        self.wsgiserver = WSGIServer(
            listener=(host, rest_port),
            application=self.flask_app,
            log=wsgi_logger,
            error_log=wsgi_logger,
        )
        msg = f'rotki REST API server is running at: {host}:{rest_port}'
        print(msg)
        log.info(msg)
        self.wsgiserver.start()
        self.ws_server = WebSocketServer(
            listener=(host, websockets_port),
            application=WebsocketResource([
                ('^/', RotkiWSApp),
            ]),
            debug=False,
            environ={'rotki_notifier': self.rotki_notifier},
        )
        msg = f'rotki Websockets API server is running at: {host}:{websockets_port}'
        print(msg)
        log.info(msg)
        self.ws_server.start()

    def stop(self, timeout: int = 5) -> None:
        """Stops the API server. If handlers are running after timeout they are killed"""
        if self.wsgiserver is not None:
            self.wsgiserver.stop(timeout)
            self.wsgiserver = None
        if self.ws_server is not None:
            self.ws_server.stop(timeout)
            self.wsgiserver = None

        self.rest_api.stop()