예제 #1
0
파일: wamp.py 프로젝트: ralphjzhang/zero
class Server(object):

    def __init__(self, methods=None):
        self._endpoint = None
        self._methods = methods
        self._wsserver = None

    def bind(self, endpoint):
        self._endpoint = endpoint

    def run(self):
        methods = self._methods
        endpoint = self._endpoint

        class WampApplication(WebSocketApplication):
            protocol_class = WampProtocol

            def on_open(self):
                wamp = self.protocol
                if methods:
                    wamp.register_object(endpoint, methods)


        ep = urlparse(self._endpoint)
        resource = Resource({'^%s$' % ep.path: WampApplication})
        self._wsserver = WebSocketServer(ep.netloc, resource, debug=True)
        self._wsserver.serve_forever()
예제 #2
0
def run(app, host=None, port=None, debug=None, logger=logger):
    monkey.patch_all()

    address = get_address(host, port, app.config['SERVER_NAME'])

    if debug is not None:
        app.debug = debug

    if app.debug:
        #app.wsgi_app = DebuggedApplication(app.wsgi_app, evalex=True)
        server = WebSocketServer(address, app.wsgi_app, debug=debug)
        server._logger = logger

        logger.setLevel(logging.INFO)

        def run_server():
            server.serve_forever()

        if os.environ.get('WERKZEUG_RUN_MAIN') != 'true':
            server.logger.info(' * Running on http://%s:%d/' % address)
            server.logger.info(' * WebSocket enabled')
        run_with_reloader(run_server)
    else:
        server = WebSocketServer(address, app.wsgi_app, debug=debug)
        server._logger = logger
        server.serve_forever()
    return server
예제 #3
0
파일: ws.py 프로젝트: DeadWisdom/splendor
def run(app, host=None, port=None, debug=None, logger=logger):
    monkey.patch_all()

    address = get_address(host, port, app.config['SERVER_NAME'])

    if debug is not None:
        app.debug = debug

    if app.debug:
        #app.wsgi_app = DebuggedApplication(app.wsgi_app, evalex=True)
        server = WebSocketServer(address, app.wsgi_app, debug=debug)
        server._logger = logger

        logger.setLevel(logging.INFO)
        def run_server():
            server.serve_forever()
        if os.environ.get('WERKZEUG_RUN_MAIN') != 'true':
            server.logger.info(' * Running on http://%s:%d/' % address)
            server.logger.info(' * WebSocket enabled')
        run_with_reloader(run_server)
    else:
        server = WebSocketServer(address, app.wsgi_app, debug=debug)
        server._logger = logger
        server.serve_forever()
    return server
예제 #4
0
파일: web_ui.py 프로젝트: ccie5818/raiden
    def run(self):
        static_path = os.path.join(self.path, 'api/webui')

        routes = [('^/static/',
                   self.make_static_application('/static/', static_path)),
                  ('^/$', self.serve_index), ('^/ws$', UIService)]

        data = {
            'handler': self.handler,  # object
            'registrars': self.registrars  # list of topics
        }
        resource = _Resource(routes, extra=data)

        server = WebSocketServer(("", self.port), resource, debug=True)
        server.serve_forever()
예제 #5
0
    def run(self):
        static_path = os.path.join(self.path, 'webui')

        routes = [('^/static/', self.make_static_application('/static/', static_path)),
                  ('^/$', self.serve_index),
                  ('^/ws$', UIService)
                  ]

        data = {'handler': self.handler,  # object
                'registrars': self.registrars  # list of topics
                }
        resource = _Resource(routes, extra=data)

        server = WebSocketServer(("", self.port), resource, debug=True)
        server.serve_forever()
예제 #6
0
def main():
    log = None
    if VERBOSE:
        log = "default"

    server = WebSocketServer((HTTP_HOST, HTTP_PORT), app, log=log)

    def term_handler(signum, frame):
        server.stop()

    signal.signal(signal.SIGINT, term_handler)
    signal.signal(signal.SIGTERM, term_handler)

    print("Listening at http://{}:{}/".format(HTTP_HOST, HTTP_PORT))
    server.serve_forever()
예제 #7
0
    def run(self):
        static_path = os.path.join(self.path, 'webui')  # XXX naming

        routes = [('^/static/',
                   self.make_static_application('/static/', static_path)),
                  ('^/$', self.serve_index), ('^/ws$', WebSocketAPI)]

        data = {
            'raiden': self.raiden,
            'port': self.port,
            'events': self.events
        }
        resource = Resource(routes, extra=data)

        server = WebSocketServer(("", self.port), resource, debug=True)
        server.serve_forever()
예제 #8
0
    def run(self):
        static_path = os.path.join(self.path, 'webui')  # XXX naming

        routes = [('^/static/', self.make_static_application('/static/', static_path)),
                  ('^/$', self.serve_index),
                  ('^/ws$', WebSocketAPI)
                  ]

        data = {'raiden': self.raiden,
                'port': self.port,
                'events': self.events
                }
        resource = Resource(routes, extra=data)

        server = WebSocketServer(("", self.port), resource, debug=True)
        server.serve_forever()
예제 #9
0
class WSGHaven(GHaven):

    stream_class = WSStream

    def __init__(self, box_class, path_pattern, merge_wsgi_app=None, **kwargs):
        super(WSGHaven, self).__init__(box_class, **kwargs)

        self.path_pattern = path_pattern
        self.merge_wsgi_app = merge_wsgi_app

    def wsgi_app(self, environ, start_response):
        """
        将原始的app,包装为包括websocket的app
        """

        path = environ['PATH_INFO']

        if re.match(self.path_pattern, path):
            ws = environ['wsgi.websocket']
            address = (environ.get('REMOTE_ADDR'), environ.get('REMOTE_PORT'))
            self._handle_stream(ws, address)
        else:
            if self.merge_wsgi_app:
                return self.merge_wsgi_app(environ, start_response)
            else:
                start_response("400 Bad Request", [])
                return ['400 Bad Request']

    def __call__(self, environ, start_response):
        return self.wsgi_app(environ, start_response)

    def _prepare_server(self, address):
        import _socket
        # 只有这样,才能保证在主进程里面,不会启动accept
        listener = self.server_class.get_listener(address,
                                                  backlog=self.backlog,
                                                  family=_socket.AF_INET)
        listener.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
        self.server = WebSocketServer(listener, self.wsgi_app)

    def _serve_forever(self):
        self.server.serve_forever()
예제 #10
0
class WSGHaven(GHaven):

    stream_class = WSStream

    def __init__(self, box_class, path_pattern, merge_wsgi_app=None, **kwargs):
        super(WSGHaven, self).__init__(box_class, **kwargs)

        self.path_pattern = path_pattern
        self.merge_wsgi_app = merge_wsgi_app

    def wsgi_app(self, environ, start_response):
        """
        将原始的app,包装为包括websocket的app
        """

        path = environ['PATH_INFO']

        if re.match(self.path_pattern, path):
            ws = environ['wsgi.websocket']
            address = (environ.get('REMOTE_ADDR'), environ.get('REMOTE_PORT'))
            self._handle_stream(ws, address)
        else:
            if self.merge_wsgi_app:
                return self.merge_wsgi_app(environ, start_response)
            else:
                start_response("400 Bad Request", [])
                return ['400 Bad Request']

    def __call__(self, environ, start_response):
        return self.wsgi_app(environ, start_response)

    def _prepare_server(self, address):
        import _socket
        # 只有这样,才能保证在主进程里面,不会启动accept
        listener = self.server_class.get_listener(address, backlog=self.backlog, family=_socket.AF_INET)
        listener.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
        self.server = WebSocketServer(listener, self.wsgi_app)

    def _serve_forever(self):
        self.server.serve_forever()
예제 #11
0
    def on_open(self):
        wamp = self.protocol
        wamp.register_procedure("http://localhost:8000/calc#add", self.add)
        wamp.register_object("http://localhost:8000/db#", KeyValue())
        print "opened"

    def on_message(self, message):
        print "message: ", message
        super(WampApplication, self).on_message(message)

    def on_close(self, reason):
        print "closed"

    def add(self, x, y):
        return int(x) + int(y)


def static_wsgi_app(environ, start_response):
    start_response("200 OK", [("Content-Type", "text/html")])
    return open("wamp_example.html").readlines()

if __name__ == "__main__":
    resource = Resource({
        '^/wamp_example$': WampApplication,
        '^/$': static_wsgi_app
    })

    server = WebSocketServer(("", 8000), resource, debug=True)
    server.serve_forever()
예제 #12
0
                                  RPCTestClass())
        self.wamp.register_pubsub("http://localhost:8000/somechannel")

        print "opened"

    def on_message(self, message):
        print "message: ", message
        super(WampApplication, self).on_message(message)

    def on_close(self):
        print "closed"

    def add(self, var, has):
        has.update({'bloep': var})
        return has

    def build_protocol(self):
        self.wamp = WampProtocol(self)
        return self.wamp

    @classmethod
    def protocol(cls):
        return WampProtocol.PROTOCOL_NAME


if __name__ == "__main__":
    resource = Resource({'/': WampApplication})

    server = WebSocketServer(("", 8000), resource, debug=True)
    server.serve_forever()
예제 #13
0
파일: manage.py 프로젝트: maquinuz/Revealer
def runserver():
    http_server = WebSocketServer(('127.0.0.1', 5001), app)
    http_server.serve_forever()