2016-06-30 39 views
1

所以我有一個完成的nodejs + socket.io + reactjs項目在我的機器上工作。我可以在我的機器上打開不同的選項卡或瀏覽器,並對其進行測試和工作。但是我想在我的局域網內的其他機器上測試它。當我通過其他機器上的wifi連接到我的網絡IP地址時,我可以看到該頁面。但是,socket.io不起作用。當我打開鉻(其它機)的控制檯,這是我看到的錯誤:React js Socket io不能在局域網中工作wifi

GET http://localhost:3000/socket.io/?EIO=3&transport=polling&t=LMXV0Uf網:: ERR_CONNECTION_REFUSED

這是我的節點APP-server.js:

app.use(express.static('./public')); 
app.use(express.static('./node_modules/bootstrap/dist')); 
var server = app.listen(3000); 
var io = require('socket.io').listen(server); 

我該如何解決這個問題?另外推薦在生產環境中部署的方式,以便socket.io能夠正常工作。

+0

另一臺機器可能是通過瀏覽器url指向您的網絡服務器,但它表示正在嘗試連接到另一臺計算機的'localhost'。您的客戶端套接字連接也需要指向服務器所在的機器。這是打算通過局域網運行還是隻是試圖測試出來? – azium

+0

@azium你好azium。不,我只是在我的局域網上測試它。對不起,我只是一個初學者。我該怎麼做才能解決這個問題?我是否讓app/socket.io監聽網絡IP? – Karl

回答

2

套接字應用有兩個部分:住在某個單一服務器上的東西,以及分配給其他計算機的客戶端代碼,這些計算機需要連接回服務器以建立套接字連接。

您的服務器代碼可能不需要更改。如果您能夠通過某個IP地址訪問它,這意味着它的服務正確。

比方說,你可以通過http://1.2.3.4:3000

某處訪問您的客戶端代碼的網站,你會碰到這樣的:

import io from 'socket.io-client' 
let serverUrl = 'localhost:3000' 
let socket = io(serverUrl) 

你需要改變serverUrl到的IP地址,你的服務器,所以http://1.2.3.4:3000

這是因爲localhost從另一臺計算機加載時指向計算機..但您需要將套接字連接回原始服務器。

+0

是的!非常感謝。現在我更瞭解socket io和nodejs。 – Karl