2014-10-09 129 views
1

我试图让两个机器之间的websockets工作。一个电脑和一个覆盆子pi是准确的。 在PC上,我使用socket.io作为客户端连接到树莓派上的服务器。 使用下面的代码我推断连接并尝试发送预定义的数据。socket.io客户端和龙卷风python服务器之间的Websocket连接

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

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

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

而且在检查在电脑上有这个错误信息:

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. 

我不知道该怎么做。你可以帮我吗? 谢谢!

回答

1

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

基本上,您的问题与跨源请求有关,即生成请求到websocket服务器的html与websocket服务器不在同一起源。我可以从你的代码中看到你已经发现了这个问题(并且你试图通过重新定义方法“check_origin”来解决它),但是你没有找到正确的方法来实现它,主要是因为在这个库中不是SockJSConnection类延伸龙卷风WebSocketHandler,并重新定义其“check_origin”是没用的。如果你仔细研究一下代码,你会发现存在一个定义的类,即SockJSWebSocketHandler,它重新定义了这种方法本身,如果它返回true,它依赖于龙卷风实现,但是这也允许你避免检查使用设置参数:

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":"*"}) 
+0

我只是尝试了你的建议,但我仍然得到了与上述相同的404消息。我也有一台nginx网络服务器。龙卷风会干扰吗? – kirijanker 2014-10-09 17:07:37

+0

它应该...可以是关于在请求中使用的协议的东西? “ip”变量的值是多少? – 2014-10-09 17:12:07

+0

Awwww是啊!谢谢!我得到了它的工作。我刚刚从socket.io切换到客户端的sockjs,并刚刚收到我的第一条短信。我应该发布代码herre,如果有人有同样的问题? – kirijanker 2014-10-09 17:47:10

相关问题