本文介绍了Tornado只能升级到WebSocket错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用Tornado进行实时应用。我在用瑞迪斯做这个。当我访问URL127.0.0.1:8888/2/
,其中2是我的用户ID时,我收到错误提示:can "Upgrade" only to websocket
。
我不知道为什么会出现此错误。出现此错误是因为我的代码或WebSocket的某些问题?
在我的脚本上,我正在做ws = new WebSocket("ws://127.0.0.1:8888/" + user_id + "/");
当我这样做时127.0.0.1:8888
它会打印我在RequestHandler的get()函数中打印的内容
需要建议
推荐答案
这是Tornado处理WebSocket的Get方法的开始:
@tornado.web.asynchronous
def get(self, *args, **kwargs):
self.open_args = args
self.open_kwargs = kwargs
# Upgrade header should be present and should be equal to WebSocket
if self.request.headers.get("Upgrade", "").lower() != 'websocket':
self.set_status(400)
self.finish("Can "Upgrade" only to "WebSocket".")
return
因此,您收到的错误消息是由于请求中缺少"Upgrade"头而导致的,当您在浏览器中简单地获取URL时看到此消息并不是错误。但是,如果您使用提供的JS代码,然后运行ws.send("message")
,则应该能够在Tornado WebSocketHandler:中捕获和处理此消息def on_message(self, message):
print(message) # print the message to a standard output
self.write_message(message) # throw it back to client
这篇关于Tornado只能升级到WebSocket错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!