Node.js禁止访问

时间:2013-09-25 21:13:57

标签: node.js websocket socket.io chat

我正在尝试使用Node js创建一个简单的聊天应用程序。我使用的是Windows操作系统。作为本地服务器我正在使用Xampp。我已经安装了Node。我还使用package.json安装了socket.io。 package.json中的代码如下所示。

{
    "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 个答案:

答案 0 :(得分:1)

您正在使用的代码是从socket.io Home 页面复制而来的,它仅用作示例,但它实际上并不是代码,因为socket.io脚本没有被绑定到任何服务器实例。

Socket.io不是服务器。它只是一个很好地处理Websockets的库。要使用socket.io,您必须要求HTTP或Express并创建服务器实例。然后,您必须使用socket.io绑定服务器实例。

有关如何启动socket.io并运行服务器的工作实现,您必须查看如何使用页面。在那里,他们有这些很好的代码示例,具体取决于您正在运行的实现(如果它是HTTP,或其他)。

因此,抓住整个Xampp服务器的想法。 Node拥有自己内置的服务器功能,这就是你要使用的功能。

这是一个关于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来访问它。