2013-09-02 4 views
0

Имейте этот простой код на Python для сервера веб-сервера торнадо.python tornado Ошибка websocket при повторном подключении

import tornado.httpserver 
import tornado.websocket 
import tornado.ioloop 
import tornado.web 
import time 
import os 
import subprocess 
from subprocess import * 
import datetime 

listeners = [] 


class WSHandler(tornado.websocket.WebSocketHandler): 

    def open(self): 
    print 'New connection was opened' 
    self.write_message("Con!") 
    listeners.append(self) 


    def on_message(self, message): 
    print 'Received:', message 
    self.write_message("Received: " + message) 
    for w in listeners: 
     w.write_message('MASS MESSAGE') 

    def on_close(self): 
    print 'Con closed...' 


    def trimite(self, msg): 
    self.write_message(msg) 


application = tornado.web.Application([ 
    (r'/ws', WSHandler), 
]) 

if __name__ == "__main__": 
    http_server = tornado.httpserver.HTTPServer(application) 
    http_server.listen(65) 
    tornado.ioloop.IOLoop.instance().start() 

Каждый раз, когда я выполняю команду с моей веб-страницы на сервер websocket, сообщение отправляется всем соединениям. он работает нормально ... но, если я закрываю и повторно подключаю клиент, и я пытаюсь отправить другую команду, я получаю эту ошибку, и соединение закрывается. Мне нужно перезапустить сервер websocket, чтобы он снова работал. Любые идеи, почему? благодаря!

ERROR:root:Uncaught exception in /ws 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/dist-packages/tornado/websocket.py", line 258, in wrapper 
    return callback(*args, **kwargs) 
    File "ciuciu.py", line 26, in on_message 
    w.write_message('MASS MESSAGE') 
    File "/usr/lib/python2.7/dist-packages/tornado/websocket.py", line 144, in write_message 
    self.ws_connection.write_message(message, binary=binary) 
AttributeError: 'NoneType' object has no attribute 'write_message' 

ответ

0

Хорошо, понял. Я должен добавить слушателей. Удалить:

def on_close(self): 
    listeners.remove(self) 
    print 'Con closed...' 
Смежные вопросы