Q:

вебсокеты и Tornado

Делаю бэкенд-сервис на DRF.Возникла необходимость поставить вебсокеты.
Для этой задачи взял Tornado.
Для этой задачи я использую следующие пакеты:
Django==1.11
Pygments==1.6
backports.ssl-match-hostname==3.4.0.2
dj-database-url==0.2.2
django-websocket-request==0.1.1
djangorestframework==3.8.2
sockjs-tornado==1.0.0
tornado==3.2

Вот как я пытаюсь слушать порт 8080 и отвечать клиенту:
class IndexHandler(web.RequestHandler):
    def get(self, url='/'):
        self.render('templates/index.html')

class RESTAPIConnection(SockJSConnection):
    def on_message(self, data):
        logging.info(self.session.conn_info.ip)
        logging.info(self.session.conn_info.headers)
        request = WebSocketRequest(data)
        response = request.get_response()
        self.send({
            'response': {
                'url': request.get_url(),
                'data': response.data
            }
        })

if __name__ == '__main__':
    port = int(os.environ.get("PORT", 8080))

    Router = SockJSRouter(RESTAPIConnection, '/ws/api')

    app = web.Application(
        [(r'/', IndexHandler)] + Router.urls
    )

    app.listen(port)

    logging.info(' [*] Listening on 127.0.0.1:{}'.format(port))

    ioloop.IOLoop.instance().start()

Слушать порт у меня удается, однако я не могу отправить успешно post запрос
и получаю ошибку 405
TypeError: finish() takes 1 positional argument but 2 were given
WARNING:tornado.access:405 POST /ws/api (127.0.0.1) 56.64ms

A:

405 т.к. метод не определен.
А вот решение подобной задачи https://zen.yandex.ru/media/id/5cbb4adabc785500b3b6b47b/sinhroniziruem-websockets-i-django-rest-framework-5cd5a088dc10c300b3398d23

