2014-10-09 132 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

相關問題