Sto usando il tornado come server. Mi piacerebbe che ricevesse dati binari. Il lato server è semplice come semplice ottiene:Websocket Tornado che supportano il binario
import tornado.websocket
import tornado.httpserver
import tornado.ioloop
import tornado.web
class WebSocketServer(tornado.websocket.WebSocketHandler):
def open(self):
print 'OPEN'
def on_message(self, message):
print 'GOT MESSAGE: {}'.format(message)
def on_close(self):
print 'CLOSE'
app = tornado.web.Application([
(r'/', WebSocketServer)
])
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(9500)
tornado.ioloop.IOLoop.instance().start()
Questo server è solo utilizzato per visualizzare i dati in entrata, non troppo speciali. Il server funziona solo con lo standard ASCII, ma esplode quando ottiene un unicode (il mio test per dati binari falsi). Ho usato il sito http://www.websocket.org/echo.html e reindirizzato l'invio per andare a ws://172.0.0.1:9500/
che è dove ho impostato il server. Il server quindi mi ha spinto con l'errore molto brutto:
ERROR:tornado.application:Uncaught exception in/
Traceback (most recent call last):
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/tornado/websocket.py", line 303, in wrapper
return callback(*args, **kwargs)
File "test.py", line 11, in on_message
print 'GOT MESSAGE: {}'.format(message)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa1' in position 0: ordinal not in range(128)
il personaggio era ¡
, una a testa in giù!. Ora so che il tornado può send binary, ma a quanto pare non riceve? Probabilmente sto facendo un piccolo errore, ma dov'è?
Cosa succederebbe se si sostituisce la dichiarazione di stampa come 'print u'GOT MESSAGE: {} '. format (message)'? – falsetru
@falsetru che l'ha risolto. Sigh, chiuderò il mio portatile e sbatterò la testa ripetutamente contro il muro più vicino. Grazie per la segnalazione. – jakebird451