有关socket.io实时文本显示的问题

时间:2015-02-10 11:40:58

标签: javascript node.js sockets websocket socket.io

我正在尝试使用node.js和socket.io库在客户端和服务器之间建立websocket连接。服务器将每秒生成一个随机数,它将发出一个允许客户端检测的事件。

问题是客户端(网页)可以检测到事件并显示服务器发送的随机数,但它不是实时的。我必须刷新浏览器才能显示新的随机数。我希望客户端实时显示随机数,但我不知道为什么我的websocket应用程序看起来不是实时的。

服务器(main.js)源代码:

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

app.get('/', function(req, res){                  
    res.sendFile(__dirname + '/index.html');
});

randomNum();

function randomNum(){
    io.on('connection', function(socket){
        socket.emit('random', Math.floor((Math.random() * 100) + 1));
    });
    setInterval(randomNum, 1000);
}

server.listen(8080);

客户端(index.html)源代码:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Websocket</title>

<script src="/socket.io/socket.io.js"></script>

<script>
var socket = io();
socket.on('random', function(data){
    document.getElementById("displayNum").innerHTML = data;
});
</script>

</head>

<body>
<p id="displayNum"></p>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

你不应该这样做:

function randomNum(){
    io.on('connection', function(socket){
        socket.emit('random', Math.floor((Math.random() * 100) + 1));
    });
    setInterval(randomNum, 1000);
}

您每隔1秒设置一次io.on连接。您应该使用函数来发出随机函数并在此函数之外设置间隔