我使用龙卷风的实时应用程序。我正在使用redis。当我访问url 127.0.0.1:8888/2/
时,其中2是我的用户id,我得到错误说can "Upgrade" only to websocket
。
我不知道为什么我得到这个错误。这个错误是由于我的代码还是websocket的一些问题引起的?
在我的javascript我做ws = new WebSocket("ws://127.0.0.1:8888/" + user_id + "/");
当我执行127.0.0.1:8888
时,它打印我在RequestHandler中的get()函数中打印的内容
需要建议
这是Tornado处理WebSockets的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
你得到的错误信息因此是由于在你的请求中缺少"升级"标题,当你在浏览器中简单地获取URL时,当你看到这个消息时,它不是一个错误。然而,如果你使用你提供的JS代码,然后运行ws.send("message")
,例如,你应该能够捕获和处理这个消息在你的龙卷风WebSocketHandler:
def on_message(self, message):
print(message) # print the message to a standard output
self.write_message(message) # throw it back to client
当我试图在龙卷风中创建WebSocket时,我遇到了同样的错误消息。我在网上找到的所有答案,包括这里,都是准确的,但并没有解决我的问题。
我终于意识到,因为我在nginx后面运行龙卷风服务器,这与我的Python或JavaScript程序无关。相反,这是一个服务器配置问题。
我找到了我的解决方案,正确配置我的nginx服务器使用信息从他们的网站。
如果有人有同样的问题,我想建议也检查任何适用的错误配置的服务器或负载平衡器设置。