0

クライアント (client1) がデータをサーバーに送信し、サーバーが同じデータを別のクライアント (client2) に送信する nodejs の名前空間を使用してアプリを開発しました。ページを更新した場合にのみデータが client2 でレンダリングされることを除いて、すべて正常に動作しています。データを動的に更新するにはどうすればよいですか?

コードは次のとおりです: server::

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>
4

1 に答える 1

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);
        }
    });

注: これにより、最後に接続したクライアントにのみニュース メッセージが送信されます。ニュース接続のコレクション (配列) が必要です。それらが切断されたときも、それらを削除する必要があります。

于 2012-10-16T15:56:32.510 に答える