2017-01-31 9 views
2

イムを使用してユーザーを更新できません。初めてのイベントが接続されているユーザーのみを示すが、私は新しいニックネームを持つ新しいページ をロードした場合、ユーザーは最初のものに更新されず、2ページ目のアップデート完璧、 が、私は3ページをロードする場合、 3ページ目の更新完全 などではありません。ロードされた最後のページだけが、接続されているすべてのユーザーを表示します。が接続されているすべてのユーザーを表示しようとしているsocket.io

Image of my problem

サーバ

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

app.use(express.static('./public')); 

io.sockets.on('connection', function(socket) { 

    socket.on('nick', function(data) { 

    var nick = data.nick; 
     nicks.push(nick); 

      socket.emit('users', { 
      nicks: nicks 
     }); 
    }) 

}); 



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


http.listen(3000, function() { 
    console.log('listening on *:3000'); 
}); 

CLIENT

$(document).ready(function() { 

    var socket = io(); 
    var nickname; 
    var nicks = new Array(); 

    nickname = prompt('Write your name:'); 

    $("#button").on("click", function(event) { 

     var nick = nickname; 
     socket.emit('nick', { 
      nick: nick 
     }); 
    }); 


    socket.on('users', function(data) { 

     nicks = data.nicks; 

     for (var i = 0; i < nicks.length; i++) { 

      $("#users_connected").append('<li>' + nicks[i] + '</li>'); 
     } 
    }); 




}); 

答えて

3

問題は、あなたが使用していることであるドキュメントからsocket.emit()

  • 文字列名で識別されるソケットにイベントを発行します。

usersイベントを受け取っているのは、ニックイベントを送信する唯一のイベントであることを意味します。

前年比は、ドキュメントからServer.emit() を使用する必要があります。

  • が接続されているすべてのクライアントにイベントを発行します。次の二つは、現在のユーザーに関するすべてのconectionsを知らせるために、しかし、あなたが明確いけないか、何らかの形で既に追加されたユーザーを無視した場合、主にあなたの現在のスキーマに失敗することができます方法

    var io = require('socket.io')(); 
        io.sockets.emit('an event sent to all connected clients'); 
        io.emit('an event sent to all connected clients'); 
    

です。

私は2つのイベント、「新しいメンバー」を持っており、全体のユーザー・データではないメンバ参照を削除して再印刷や物事の検証を回避するために、すべてのユーザーが、その後、「disconected」を送信することを好むだろう。

はよりadvencedの使用のためには、名前空間を確認する必要があります。特定の接続グループにイベントを送信する。

それをチェックアウト;)

http://socket.io/docs/server-api/

+0

作品!!!、私はあなたの答えを受け入れる、そんなに仲間に感謝!私は非常にあなたの助けに感謝:) –

関連する問題