2013-09-25 101 views
0

我想創建一個簡單的聊天應用程序使用節點js。我正在使用Windows操作系統。作爲本地服務器,我使用Xampp。我已經安裝了Node。我也使用package.json安裝了socket.io。 package.json中的代碼如下所示。訪問被禁止Node.js

{ 
    "name":"chat", 
    "version":"0.0.1", 
    "private":"true", 
    "dependencies":{ 
     "socket.io":"0.9.16", 
     "express":"3.4.0" 
    } 
} 

然後我寫了服務器的代碼。節點服務器在端口1337中運行。服務器的代碼如下所示。

var io = require('socket.io').listen(1337); 

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

然後當我運行它時,它正在運行。然後我寫了一個index.php文件中的客戶端代碼。下面給出了客戶端的代碼。

<!DOCTYPE html> 
<html> 
<head> 
    <title>Chat app.</title> 
</head> 
<body> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
    <script src="/node:1337/socket.io/socket.io.js"></script> 
    <script type="text/javascript"> 
     $(document).ready(function(){ 
      var socket = io.connect('http: // localhost/node : 1337'); 
      socket.on('news', function (data) { 
       console.log(data); 
       socket.emit('my other event', { my: 'data' }); 
      }); 
     }); 
    </script> 
</body> 
</html> 

但是,當我嘗試使用瀏覽器運行它時,我在控制檯中看到的是訪問被禁止。我所有的文件,包括node_modules都保存在C:\xampp\htdocs\node中。

回答

1

您正在使用的代碼是從socket.io 首頁頁面複製,它只是用來作爲一個例子,但它實際上沒有工作的代碼,因爲socket.io腳本沒有被綁定到任何服務器實例。

Socket.io不是服務器。這只是一個很好地處理Websocket的庫。爲了使用socket.io,你必須要求HTTP或Express並創建一個服務器實例。然後你必須將服務器實例與socket.io綁定。

有關如何使用服務器啓動並運行socket.io的工作實現,您必須查看如何使用頁面。在那裏,他們有這些很好的代碼示例,具體取決於您正在運行的實現(如果是HTTP或其他)。

因此劃傷整個Xampp服務器的想法。節點有它自己的內置服務器功能,這就是你打算使用的。

以下是Socket.io如何與HTTP一起使用的示例(來自socket.io網站)。在此代碼段,該服務器還創建(和它的監聽端口80),所以你不必擔心:

var app = require('http').createServer(handler) 
    , io = require('socket.io').listen(app) 
    , fs = require('fs') 

app.listen(80); 

function handler (req, res) { 
    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); 
    }); 
}); 

一旦你的服務器的正常運行,你可以通過鍵入訪問localhost:80進入瀏覽器。

+0

我不希望節點爲我服務索引頁。我希望節點只是通過套接字交換json數據。那我該怎麼辦? –