Tôi đang sử dụng lốc xoáy làm máy chủ. Tôi muốn nó nhận dữ liệu nhị phân. Phía máy chủ đơn giản như sau:Tornado websockets hỗ trợ nhị phân
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()
Máy chủ này chỉ được sử dụng để trực quan hóa dữ liệu đến, không quá đặc biệt. Máy chủ hoạt động chỉ với ascii tiêu chuẩn, nhưng nó phát nổ khi nó nhận được bất kỳ unicode nào (kiểm tra của tôi cho dữ liệu nhị phân giả). Tôi đã sử dụng trang web http://www.websocket.org/echo.html và chuyển hướng gửi đi để đến ws://172.0.0.1:9500/
là nơi tôi thiết lập máy chủ. Máy chủ sau đó đã nhắc tôi với lỗi rất khó chịu:
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)
Ký tự là ¡
, lộn ngược! Bây giờ tôi biết rằng cơn lốc xoáy có thể send binary, nhưng dường như không nhận được? Tôi có thể làm một số sai lầm nhỏ, nhưng nó ở đâu?
gì xảy ra nếu bạn thay thế câu lệnh in dưới dạng 'print u'GOT MESSAGE: {} '. format (message)'? – falsetru
@falsetru Điều đó đã sửa nó. Thở dài, tôi sẽ đóng máy tính xách tay của tôi và đập đầu liên tục vào bức tường gần nhất. Cảm ơn bạn đã chỉ ra điều đó. – jakebird451