Связать роль с компонентом Crossbar

Я хотел бы запустить component с определенной ролью. Но каждый раз, когда я устанавливаю аргумент «роль» для своего компонента, сервер Crossbar работает так, как будто в нем есть бесконечный цикл: когда я впервые попадаю на страницу, все работает отлично, но если я обновляю или открываю другое окно на той же странице или даже если другой клиент открывает эту страницу, страница загружается снова и снова...

Затем, если я остановлю сервер crossbar, у меня будет это сообщение несколько раз в журналах: [Controller 4422] waiting for 4433 to exit...

Вот мой conf.json:

{
  "controller": {
  },
  "workers": [
    {
      "type": "router",
      "options": {
        "pythonpath": [".."]
      },
      "realms": [
        {
          "name": "realm1",
          "roles": [
            {
              "name": "anonymous",
              "permissions": [
                {
                  "uri": "*",
                  "publish": true,
                  "subscribe": true,
                  "call": true,
                  "register": false
                }
              ]
            },
            {
              "name": "wamp_app",
              "permissions": [
                {
                  "uri": "*",
                  "publish": true,
                  "subscribe": true,
                  "call": true,
                  "register": true
                }
              ]
            }
          ]
        }
     ],
     "transports": [
       {
         "type": "web",
         "endpoint":{
           "type":"tcp",
           "port":8000
         },
         "paths": {
           "/": {
             "type": "wsgi",
             "module": "cyto_multihead.wsgi",
             "object": "application"
            },
            "lp": {
              "type": "longpoll"
            },
            "static": {
              "type": "static",
              "directory": "../static/"
            },
            "ws": {
              "type": "websocket"
            }
          }
        }
      ],
      "components": [
        {
          "type": "class",
          "classname": "crossbar_test.crossbar.MyComponent",
          "realm": "realm1",
          "role": "wamp_app"
        }
      ]
    }
  ]
}

Мои файлы расположены так:

my_project_directory/
  .crossbar/
    config.json
  crossbar_test/
    crossbar.py

Более того, если я не укажу роль, сервер не запускается с этой ошибкой:

[Router      28146] --- <exception caught here> ---
[Router      28146] File "/usr/local/lib/python2.7/dist-packages/twisted/internet/defer.py", line 150, in maybeDeferred
[Router      28146] result = f(*args, **kw)
[Router      28146] File "/usr/local/lib/python2.7/dist-packages/crossbar/worker/router.py", line 510, in start_router_component
[Router      28146] self.session_factory.add(session, authrole=config.get('role', 'anonymous'))
[Router      28146] File "/usr/local/lib/python2.7/dist-packages/crossbar/router/session.py", line 470, in add
[Router      28146] self._app_sessions[session] = RouterApplicationSession(session, self._routerFactory, authid, authrole)
[Router      28146] File "/usr/local/lib/python2.7/dist-packages/crossbar/router/session.py", line 88, in __init__
[Router      28146] assert(authrole is None or isinstance(authrole, six.text_type))
[Router      28146] exceptions.AssertionError:
[Router      28146] 'Failure while invoking procedure <bound method RouterWorkerSession.start_router_component of <crossbar.worker.router.RouterWorkerSession object at 0x7fc1a4484cd0>> registered under "crossbar.node.conan.worker.worker1.start_router_component".'
[Controller  28135] Traceback (most recent call last):
[Controller  28135]   File "/usr/local/lib/python2.7/dist-packages/crossbar/controller/node.py", line 183, in run_node_config
[Controller  28135]     yield self._run_node_config(config)
[Controller  28135] ApplicationError: ApplicationError('wamp.error.runtime_error', args = (), kwargs = {})
[Controller  28135] sending TERM to subprocess 28146
[Controller  28135] waiting for 28146 to exit...
[Router      28146] Received SIGTERM, shutting down.
[Router      28146] Connection to node controller lost.
[Router      28146] Main loop terminated.
[Controller  28135] Worker 28146: Process connection gone (Connection was closed cleanly.)
[Controller  28135] Main loop terminated.

Что не так в моей конфигурации?


person Neilujd    schedule 22.07.2015    source источник


Ответы (1)


Я думаю, что проблема связана с приведенной ниже конфигурацией:

"/": {
  "type": "wsgi",
  "module": "cyto_multihead.wsgi",
  "object": "application"
},

Если вы измените конфигурацию, например:

"/": {
  "type": "static",
  "directory": "../hello/web"
},

Перекладина будет работать успешно.

person Klanjabrik    schedule 08.12.2015