2016-07-29 54 views
0

服務器端代碼:socket.io混淆express.js

var server = require("http").Server(express); 
var io = require("socket.io")(server); 
server.listen(5000); 

io.on('connection', function(client) { 

    client.on('order', function(data) { 
     io.emit('place_order',data); 
    }); 
}); 

cilent端代碼

var socket = io.connect('http://localhost:5000'); 
socket.on('place_order', function (data) {alert('data.x')}) 

某處在github上我的git克隆一個項目,我看到上面的東西。第三行的服務器端代碼讓我困惑。爲什麼作者在這裏創建額外的端口?是不是可以放棄第三行,並在沉默的一面只是連接到沒有端口像var socket = io.connect('http://localhost:5000');路徑?在這裏需要socket.io專家的解釋,我很困惑。

順便說一句這個代碼工作..

+0

的代碼的第3行是聲明因爲node.js中不經常在端口80實施例運行:在[鏈接](https://nodejs.org/en/about/)它顯示port 3000. – tuananh

+0

@tuananh第三行爲套接字創建了另一個服務器5000,快速應用程序正在運行3000.是否有必要? –

回答

0

Why the author created extra port here?

你必須要對你的服務器的一些端口上server.listen(nnn)是做到這一點的方法之一。如果你沒有啓動你的服務器,它實際上並沒有運行,你永遠不能連接到它。

必須創建服務器,然後在特定端口上啓動服務器。

在您的特定的代碼示例,您選擇沒有你的服務器將不運行它運行,而不是更常見的端口80

isn't it ok to discard the 3rd line

號上的5000端口的服務器。


如果您的服務器上的端口80開始,那麼你不必列出的URL端口號,因爲這是一個http://連接的默認端口號。

+0

看看這個頁面,https://mliu95.github.io/2014/07/13/Creating-an-online-multiplayer-web-game-using-Socketio-and-Quintus-Part1/關於'建立我們的webserver'部分。 –

+0

@ThianKianPhin - 看看那個頁面上的內容?它有一個線路'服務器。聽(80);'啓動服務器。他們在該樣本中選擇了端口80。您可以選擇Web服務器的端口號。客戶當然必須連接您選擇的任何端口號。 – jfriend00

0

將您的socket.io附加到HTTP服務器後,需要啓動它。這是如何套接字工作。這就是第三行。所以,刪除它意味着你沒有啓動服務器本身,顯然這是行不通的。

端口爲5000,對您而言可能看起來並不常規,但如果PORT 80正在使用中,這是一種防止錯誤的標準做法,就像它通常由其他基於Web/Internet的應用程序/服務器一樣。但是,如果情況並非如此隨意更換3號線爲server.listen(80);

對於裁判的端口更改爲80:如果你的錯誤:Error: listen EADDRINUSE :::80然後直接瞭解該端口是不是免費的!

+0

但它是明確的,它默認運行3000,爲什麼不使用相同的端口socket.io呢? –

+0

我不知道3000是Express的默認端口。但是,如果3000是免費的,爲什麼不使用它,如果你喜歡? – Iceman