2013-01-13 66 views
0

Heya我想建立一個小型聊天客戶端,以瞭解websockets如何工作以便在canvas中進行遊戲。它可以很好地發送套接字,但它們只會將它發送給寫它的人。不能發送消息到所有套接字(socket.io)

我想我錯過了一些小事,但我不明白爲什麼它不起作用。

服務器端代碼

var app = require('express')() 
    , server = require('http').createServer(app) 
    , io = require('socket.io').listen(server); 

server.listen(3000); 

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

io.sockets.on('connection', function (socket) { 
    socket.on('user-message', function (data) { 
    console.log(data); 
    sendMessage(data.message); 
    }); 
}); 

var sendMessage = function(message) { 
     io.sockets.emit('server-message', {message: message}); 
} 

客戶端代碼

 <script src="/socket.io/socket.io.js"></script> 
     <script> 
      var socket = io.connect('http://localhost'); 

      socket.on('server-message', function (data) { 
       var history = $('#chatbox').val(); 

       $('#chatbox').val(history + "\n" + data.message) 
      }); 


      $("#write").keyup(function(event){ 
       if(event.keyCode == 13){ 
        socket.emit('user-message', {message: $(this).val()}); 
        $(this).val(''); 
       } 
      }); 
     </script> 

回答

1

您可以使用socket.broadcast.emit將消息發送到所有其他的插座。

io.sockets.on('connection', function (socket) { 
    socket.on('user-message', function (data) { 
     console.log(data); 
     sendMessage.call(socket, data.message); 
    }); 
}); 
var sendMessage = function(message) { 
     this.emit('server-message', {message: message}); 
     this.broadcast.emit('server-message', {message: message}); 
} 
+0

它沒有工作,或者我害怕。只需將它發回給首先發送給它的人。實際上我曾嘗試過播放,並認爲io.sockets.emit會有所幫助,因爲它是所有套接字。 – Ms01

+0

@cubsink是否在單個套接字上調用'broadcast.emit'? – Musa

+0

我不這麼認爲,我複製了你的代碼。我試圖將其更改爲io.sockets。 – Ms01

相關問題