2012-04-30 40 views
2

所以,我一直在想如何使用socket.io。 Socket.io官方向我介紹了這個教程頁面:https://github.com/LearnBoost/socket.io,並且我經歷了幾次。不過,每次我都會提出相同的問題列表。它們是:關於socket.io教程(第1部分)的許多問題?

問題1)在整個官方socket.io教程的整個過程中,「如何安裝」出現在多行上。在README.md文件的第一步,在其官方混帳(這是我對問題的教程)是:

How to Install 
npm install socket.io 

我的問題:何時,何地,何種系統,等等? 我在運行XAMPP服務器的Windows XP計算機上安裝了節點。我跟着教程信的步驟,這裏的結果的截圖:

cmd>md nodetmp cmd>cd nodetmp cmd>node node>npm install socket.io {ellipse} node><Keystroke: Enter> {elipse}

正如你所看到/聽到,結果是橢圓點。擊鍵後,更多的橢圓點。我離開這個窗口約45分鐘。吃了早餐並和我的妻子交談過。顯然沒有什麼是下載,它不會做任何事情比閒坐。那麼,什麼時候該工作?爲什麼它不工作?我可能在錯誤的位置輸入了命令嗎?這個命令是否與Windows兼容?它與XAMPP兼容嗎?如果是這樣,怎麼樣?

第2期)從README.md

How to use 
First, require socket.io: 

自然的問題是, 「哪裏下面的代碼屬於?」我做了一些研究,發現在http://socket.io/#how-to-use,有一個教程,影響README.md。不過,還有一個額外的教程。所以,我們回到第一個問題:代碼屬於哪裏?我嘗試過不同的地點。有時我會收到系統消息。我想知道是服務器還是客戶端生成這些消息。我無法在控制檯中看到任何日誌。

這裏是服務器的源代碼:

var app = require('http').createServer(handler) //No handler is required in the express version. Why have a handler here and not there? 
    , io = require('socket.io').listen(app) 
    , fs = require('fs') 

app.listen(80); //Why 80? The documentation says that the listen port should be either 8000 or 9100. Is 80 the listen port? 

function handler (req, res) { //What is req? It doesn't appear anywhere else in the server or client code. 
    fs.readFile(__dirname + '/index.html', 
    function (err, data) { 
    if (err) { 
     res.writeHead(500); 
     return res.end('Error loading index.html'); 
    } 

    res.writeHead(200); 
    res.end(data); 
    }); 
} 

io.sockets.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
    console.log(data); 
    }); 
}); 

現在,我不想純粹是至關重要的。最後6行代碼非常清晰易懂。我只是無法達到我可以測試的地步,看它是否有效。

在開始討論其他問題之前,我想先討論第一個教程。待成功後,我可以向他們提交變更請求或提出請求 - 這樣可以讓其他人在將來不會有同樣的挫敗感。

這裏的下一個問題先睹爲快:

我需要讓我自己的服務器端?

enter image description here

謝謝閱讀。

回答

3

首先,自認倒黴Node.js的作品,以及在Windows,因爲它確實在Mac OS或Linux。大多數node.js開發人員不使用Windows,所以沒有什麼測試。您可能會繼續在Windows計算機上遇到問題。

您使用的是哪個版本的node.js?您可以通過運行檢查你已經安裝節點上的服務器上的命令行執行以下操作:

> node -v 

如果是大於0.6比NPM(節點包管理器,閱讀更多http://npmjs.org/)已安裝。爲您的項目創建一個新目錄

> mkdir myproject 
> cd myproject 

然後您可以使用NPM來安裝socket.io。從同一個命令行(非節點),運行:

> npm install socket.io 

這將在您本地的myproject目錄下一個名爲node_modules目錄中安裝socket.io庫。然後,您可以在要使用它的.js文件中輸入require('socket.io')

在這一點上,你應該運行的代碼(假設你已經正確地複製了示例)。要運行您的應用程序,請使用node命令行工具。假設你保存你的應用程序app.js,您將使用運行它:

> node app.js 

爲了回答您的其他問題:

  1. Express.js是node.js的一個輕量級的框架,使創建的應用程序更容易和更快。我強烈建議你考慮一下你的項目。它爲你做了很多事情,所以你不必擔心它們。
  2. Node.js應用程序通常在高端口上進行偵聽,因此您不需要rootaccess來運行它們(特別是在Unix環境中,不知道Windows的功能)。端口8080是常見的,我碰巧聽3000我的應用程序。當你打電話給你的服務器時,只要確保在使用80以外的東西時包括端口號(例如localhost:3000)。
  3. Req包含有關傳入請求的所有詳細信息。您可以在您的代碼中執行console.log(req)將其全部轉儲到控制檯以供您自己查看。您需要熟悉Connect這是一組適用於node.js的中間件。有用於解析表單數據,cookie等的模塊,所以你不必自己去做。

最後,您可以編寫一些客戶端代碼以實際連接到您的服務器。在HTML文件中,確保包括socket.io.js爲標準的JavaScript腳本,然後使用連接到服務器:

var socket = io.connect(''); // filling in your server info 
+0

我在答案的正文中加了「(不是節點)」。好答案。謝謝。如果我有其他專門針對官方教程的問題,我會在測試應用程序後重新發布,也可能鏈接到第2部分。 –

+0

好吧,肯定會有第2部分。不過,我會看到自己能夠走多遠。第一個主要問題是它連接到谷歌,在某處(可能爲jQuery)。你認爲這是安全的嗎? –

+0

是的,大多數主要網站都使用Google CDN(內容分發網絡)中的JQuery。由於大多數網站都是這樣做的,大多數用戶已經在緩存中存儲了這些內容,不需要再次下載。 – Bill

0

1st在客戶端,您需要包含Socket.io。把它與你的HTML。這允許客戶端執行所需的握手過程來授權雙向web套接字連接。

script(src="/socket.io/socket.io.js") 

2客戶端需要連接。

var socket = io.connect(''); 

如果你不能因爲某些原因下載Socket.IO: Node.js + Socket.io + Windows 7/8?

1

我也有問題,並且不認爲指示是很清楚。我使用了express3的例子。這是我如何運作的。

服務器代碼

  1. 我創建了一個項目目錄,我們就叫它server_code
  2. 鎘server_code
  3. 冉NPM安裝socket.io表達
  4. 創建在一個文件名爲app.js server_code目錄並將從socket.io express3示例部分列出的app.js代碼複製到此文件中
  5. 必須將端口從80更改爲8080(或其他)
  6. RAN節點app.js

客戶端代碼

  1. 創建您的系統上的新目錄的任何地方,我們把它叫做client_code
  2. 創建一個名爲index.html的新文件,並複製從socket.io網頁
  3. localhost更改內容在爲localhost:8080
  4. 在client_code創建一個新的src目錄
  5. 複製從服務器代碼到客戶端的文件socket.io.js(最難的部分爲我找出)

    CP server_code/node_modules/socket.io/node_modules/socket.io客戶機/ DIST/socket.io.js client_code/src/-v

  6. 在瀏覽器中打開index.html並檢查控制檯。你應該看到Object hello world。