2013-09-02 3 views
0

토네이도 웹 소켓 서버에 대한 간단한 파이썬 코드가 있습니다.python 토네이도 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 서버를 다시 시작해야합니다. 어떤 이상이 그럴까요? 감사!

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

좋아, 알아 냈어. 리스너를 추가해야합니다 .remove :

def on_close(self): 
    listeners.remove(self) 
    print 'Con closed...' 
관련 문제