2014-03-25 210 views
1

我在製作中有一個即時消息聊天應用程序,並且在讓我的客戶端從我的服務器接收數據時遇到問題。有誰能向我解釋爲什麼會發生這種情況嗎?socket.io客戶端沒有收到來自服務器的廣播

app.js

var http = require("http"); 
var express = require("express"); 
var socket = require("socket.io"); 

var app = express(); 
app.use(express.static(__dirname + "/public")); 
var server = http.createServer(app); 
server.listen(8080); 
var io = socket.listen(server); 

io.sockets.on("connection", function(client) { 
    client.on("join", function(name) { 
     client.set("nickname", name); 
     console.log(name + " connected."); // logs name correctly 
     client.broadcast.emit("names", name); 
    }); 
}); 

的index.html

<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
     <script src="/socket.io/socket.io.js"></script> 
     <script type="text/javascript"> 
      var server = io.connect("http://localhost:8080"); 

      server.on("connect", function(data) { 
       nickname = ""; 
       while (nickname == null || nickname.trim() == "") { 
        nickname = prompt("Enter name"); 
       } 
       server.emit("join", nickname); 
      }); 

      server.on("names", function(data) { 
       document.getElementById("txtNames").value = data; 
      }); 
     </script> 
    </head> 
    <body> 
     <textarea id="txtNames"></textarea> 
    </body> 
</html> 

回答

1

你知道什麼是廣播是什麼?當您作爲套接字事件的結果廣播消息時,除了觸發事件的套接字之外,消息將發送到所有連接的客戶端。你的情況也是如此。如果你想發出names事件您連接的客戶端然後在app.js

+0

我看到使用

socket.emit("names", name);。我正在使用廣播,因爲這是CodeSchool的node.js課程視頻中使用的人。感謝您向我解釋其真正的功能,我一定會記住它的未來。 –

+1

我能理解。假設您在瀏覽器的3個選項卡中打開了index.html,它們是3個連接的客戶端。現在,如果您使用client.broadcast.emit,並且您從客戶端觸發「加入」,則會向剩餘的其他兩個客戶端觸發「名稱」事件。 –

相關問題