本文介绍了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错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-26 16:35