得到简单的node.js socket.io示例工作

时间:2014-04-15 22:27:50

标签: node.js socket.io

我从https://github.com/shapeshed/nodejsbook.io.examples/tree/master/hour12/example02

下载了这个非常简单的socket.io示例

的package.json:

{       "name"          :       "socketio_example"
,       "version"       :       "0.0.1"
,       "private"       :       "true"
,       "dependencies"  :       {       "socket.io"     :       "0.8.7" }
}

app.js:

var http        = require('http')       ;
var fs          = require('fs')         ;
var count = 0;
var server = http.createServer(function (req, res)      {
    fs.readFile('./index.html'      ,   function(error, data)   {
            res.writeHead(200,      {   'Content-Type'  :       'text/html'});
            res.end(data, 'utf-8');
    });
}).listen(3000, "1xx.2xx.1xx.26");
console.log('Server is running');

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

io.sockets.on('connection', function (socket) {
    count++;
    console.log('User connected; ' + count + ' user(s) present.' );
    socket.emit             ('users'     ,   {   number  :   count   })    ;
    socket.broadcast.emit   ('users'     ,   {   number  :   count   })    ;
    socket.on('disconnect', function()   {
            count--;
            console.log('User disconnected; ' + count + ' user(s) present.' );
            socket.broadcast.emit('users'   , {       number  :       count   })      ;
    });
});

的index.html:

<!DOCTIME html>
<html lang='en'>
<head>
<title>Socket.IO Example</title>
</head>
<body>
<h1>Socket.IO Example</h1>
<p id='count'></p>
<script src='/socket.io/socket.io.js'></script>
<script>
    var socket = io.connect('http://1xx.2xx.1xx.26:3000')   ;
    var count = document.getElementById('count');
    socket.on('users', function(data)       {
            console.log('Got update from the server!');
            console.log('There are ' +  data.number + ' users!');
            count.innerHTML = data.number;
    });
<script>
</body>
<html>

然后做了:

node  install  ;

最后:

node app.js   &

然后当我尝试使用localhost(127.0.0.1)时,我可以看到我的html代码:

curl http://127.0.0.1:3000 ;

然后我将IP号码从127.0.0.1更改为我自己的IP号码。并重新启动应用程序。这个命令:

curl http://1xx.2xx.1xx.26:3000 ;

再次向我展示了html代码。

这个项目应该显示连接数的计数,但我似乎无法让它正常工作。但是,我也没有收到任何错误。当我浏览到http://1xx.2xx.1xx.26:3000/并且标题出现但没有其他内容,没有用户数时,网页即将出现。

当网页连接时,我在服务器上执行此消息:

 debug - served static content /socket.io.js

我可能做错了什么建议或想法?

谢谢大家!

2 个答案:

答案 0 :(得分:2)

我在看到socket.io的一些例子时遇到了很多麻烦,所以我试图尽可能简单地将其分解。也许这对你也有帮助。

我在此处发布的示例中调整了此示例:http://socket.io/get-started/chat/

首先,从一个空目录开始,创建一个名为 package.json 的非常简单的文件。将以下内容放入其中。

{
"dependencies": {}
}

接下来,在命令行中,使用npm来安装此示例所需的依赖项

$ npm install --save express socket.io

这可能需要几分钟,具体取决于您的网络连接速度/ CPU /等。要检查一切是否按计划进行,您可以再次查看 package.json 文件。

$ cat package.json
{
  "dependencies": {
    "express": "~4.9.8",
    "socket.io": "~1.1.0"
  }
}

创建一个名为 server.js 的文件。这显然是我们的节点运行的服务器。将以下代码放入其中:

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res){

  //send the index.html file for all requests
  res.sendFile(__dirname + '/index.html');

});

http.listen(3001, function(){

  console.log('listening on *:3001');

});

//for testing, we're just going to send data to the client every second
setInterval( function() {

  /*
    our message we want to send to the client: in this case it's just a random
    number that we generate on the server
  */
  var msg = Math.random();
  io.emit('message', msg);
  console.log (msg);

}, 1000);

创建名为 index.html 的最后一个文件,并将以下代码放入其中。

<html>
<head></head>

<body>
  <div id="message"></div>

  <script src="/socket.io/socket.io.js"></script>
  <script>
    var socket = io();

    socket.on('message', function(msg){
      console.log(msg);
      document.getElementById("message").innerHTML = msg;
    });
  </script>
</body>
</html>

您现在可以测试这个非常简单的示例,并查看类似于以下内容的输出:

$ node server.js
listening on *:3001
0.9575486415997148
0.7801907607354224
0.665313188219443
0.8101786421611905
0.890920243691653

如果您打开一个Web浏览器,并将其指向您正在运行节点进程的主机名,您应该会在浏览器中看到相同的数字,以及查看同一页面的任何其他连接的浏览器。< / p>

答案 1 :(得分:0)

我在virtualbox上安装了一个新的linux并使用它。它运行良好运行localhost但不通过网络。

答案非常明显:

app.js -

原始第9行和第10行:

}).listen(3000, "127.0.0.1");
console.log('Server running at http://127 .0.0.1:3000/');

新行9&amp; 10:

}).listen(3000);
console.log('Server running at port 3000/');

<强>的index.html

原作13行:

var socket = io.connect('http://127.0.0.1:3000');

新行13:

var socket = io.connect('http://1xx.2xx.3xx.1:3000');