gpt4 book ai didi

python - socket.io客户端和tornado python服务器之间的Websocket连接

转载 作者:太空宇宙 更新时间:2023-11-03 18:09:13 28 4
gpt4 key购买 nike

我正在尝试让 websockets 在两台机器之间工作。确切地说,一台电脑和一个树莓派。在 PC 上,我使用 socket.io 作为客户端连接到树莓派上的服务器。使用以下代码,我启动了连接并尝试发送预定义的数据。

var socket = io.connect(ip + ':8080');
socket.send('volumes', { data: data });

在树莓派上,websocket 服务器如下所示:

from tornado import web, ioloop
from sockjs.tornado import SockJSRouter, SockJSConnection

class EchoConnection(SockJSConnection):

def on_message(self, msg):
self.send(msg)


def check_origin(self, origin):
return True

if __name__ == '__main__':
EchoRouter = SockJSRouter(EchoConnection, '/echo')

app = web.Application(EchoRouter.urls)
app.listen(8080)
ioloop.IOLoop.instance().start()

但是连接从未建立。我不知道为什么。在服务器日志中我得到:

WARNING:tornado.access:404 GET /socket.io/1/?t=1412865634790 (192.168.0.16) 9.01ms

在电脑上的 Inspector 中出现以下错误消息:

XMLHttpRequest cannot load http://192.168.0.10:8080/socket.io/1/?t=1412865634790. Origin sp://793b6d4588ead99e1780e35b71d24d1b285328f8.hue is not allowed by Access-Control-Allow-Origin. 

我没有主意,不知道该怎么办。你能帮助我吗?谢谢!

最佳答案

嗯,您的问题的解决方案与 sockjs-tornado 库的内部设计有关,而不是与 socket.io 库有关。

基本上,您的问题与跨源请求有关,即生成对 websocket 服务器的请求的 html 与 websocket 服务器的源不同。我可以从您的代码中看到您已经发现了问题(并且您尝试通过重新定义方法“check_origin”来解决它),但您没有找到正确的方法来做到这一点,基本上是因为在这个库中不是 SockJSConnection 类扩展了tornado WebSocketHandler,因此重新定义它的“check_origin”是没有用的。如果你深入研究一下代码,你会发现存在一个定义的类,即 SockJSWebSocketHandler ,它重新定义了此类方法本身,如果它返回 true,它依赖于tornado 实现,但这也可以让你避免这种情况使用设置参数检查:

class SockJSWebSocketHandler(websocket.WebSocketHandler):
def check_origin(self, origin):
***
allow_origin = self.server.settings.get("websocket_allow_origin", "*")
if allow_origin == "*":
return True

因此,总而言之,您只需在服务器设置中包含设置“websocket_allow_origin”="*",一切就应该正常工作 =D

if __name__ == '__main__':
EchoRouter = SockJSRouter(EchoConnection, '/echo', user_settings={"websocket_allow_origin":"*"})

关于python - socket.io客户端和tornado python服务器之间的Websocket连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26281723/

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