gpt4 book ai didi

python - 支持二进制的 Tornado websockets

转载 作者:太空狗 更新时间:2023-10-30 01:29:26 26 4
gpt4 key购买 nike

我正在使用 Tornado 作为服务器。我希望它接收二进制数据。服务器端非常简单:

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()

这个服务器只是用来可视化传入的数据,没什么特别的。服务器仅使用标准 ascii 查找,但在获取任何 unicode 时会爆炸(我对假二进制数据的测试)。我使用了网站 http://www.websocket.org/echo.html并将发送重定向到 ws://172.0.0.1:9500/,这是我设置服务器的地方。然后服务器提示我一个非常讨厌的错误:

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)

字符是 ¡,一个颠倒的 !。现在我知道 Tornado 可以send binary ,但显然没有收到?我可能犯了一些小错误,但错误在哪里?

最佳答案

行内

print 'GOT MESSAGE: {}'.format(message)

您建议 Python 将字符串格式化为字节串,如果字符串包含非 ASCII 字符,则该操作失败。只需使用字符串(在 Python 2.x 中以 u 为前缀)代替(括号可选):

print (u'GOT MESSAGE: {}'.format(message))
# ^

或者,如果你想检查二进制字符,使用 repr :

print ('GOT MESSAGE: {}'.format(repr(message)))
# ^^^^^ ^

关于python - 支持二进制的 Tornado websockets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18940810/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com