如何根据nodejs服务器输出更新客户端HTML页面?

时间:2012-10-16 06:25:20

标签: node.js socket.io

我使用nodejs的命名空间开发了一个应用程序,其中客户端(client1)将数据发送到服务器,服务器将相同的数据发送到另一个客户端(client2)。 一切都运行正常,只有当我刷新页面时才会在client2中呈现数据。如何动态更新数据?

代码如下: 服务器::

var io = require('socket.io').listen(8007);
    var chat = io
      .of('/chat')
      .on('connection', function (socket) {
        socket.on('message', function(message){
        console.log("Received message:: " + message + " - from client " + socket.id);
            var news = io
            .of('/news')
            .on('connection', function (socket1) {
            socket1.send("received::" + message + " - from client " + socket.id);
            });
    });
    });

,client1是::

<script>
var count=0;
function connect() {
  var chat = io.connect('http://localhost:8007/chat');
    chat.send('chat message:::' + count);
    count++;
  }
</script>

接收客户端::

<script>
  var news = io.connect('http://localhost:8007/news');
    news.on('message', function(data){
    document.getElementById('message').innerHTML = "\n Server says: " + data;
    });  
</script>

1 个答案:

答案 0 :(得分:1)

我认为您的问题出在服务器上。在收到“聊天”连接之前,您不会设置“新闻”监听器。将服务器代码更改为以下内容:

var io = require('socket.io').listen(8007);
var newsSocket;
var news = io
    .of('/news')
    .on('connection', function (socket1) {
        newsSocket = socket1;
    });
var chat = io
    .of('/chat')
    .on('connection', function (socket) {
        socket.on('message', function(message){
        console.log("Received message:: " + message + " - from client " + socket.id);
        for(var i=0; i<newsSockets.length; i++) {
            newsSocket.send("received::" + message + " - from client " + socket.id);
        }
    });

注意:这只会将新闻消息发送到最后连接的客户端。你应该有一个新闻连接的集合(数组)。您也应该在断开连接时删除它们。