我从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
我可能做错了什么建议或想法?
谢谢大家!
答案 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');