2012-10-03 180 views
0

我想使它所以當用戶按下一個按鈕,一個div的背景將改變顏色爲所有用戶。但這並沒有發生。這是我的socket.onsocket.emit問題。這是我的代碼。socket.on()和socket.emit()失敗

服務器端

var express = require('express'); 
var routes = require('./routes'); 
var io = require('socket.io'); 

var app = express(); 
var server = require('http').createServer(app); 

app.configure(...); 

app.get('/', routes.index); 

server.listen(3000, function(){ 
    console.log('Listening on port 3000'); 
}); 

//Attach socket.io 
var io = io.listen(server); 

io.sockets.on('connection', function (socket) { 
    console.log('connection established'); 
    socket.on('background change event', function(button){ 
     console.log(button); 
     if(button == 'button_1') 
      socket.emit('background change', 'red'); 
     else if(button == 'button_2') 
      socket.emit('background change', 'green'); 
     else if(button == 'button_3') 
      socket.emit('background change', 'blue'); 
    }); 
}); 

客戶端

var socket = io.connect(); 

$(document).ready(){ 
    var buttons = [$('#button_1'), $('#button_2'), $('#button_3')]; 
    $.each(buttons, function(i, val){ 
     val.click(function(){ 
      console.log('clicked ' + val.attr('id')); 
      socket.emit('change background event', val.attr('id')); 
     }); 
    }); 

    socket.on('change background', function(color){ 
     console.log(color); 
     $('#change_my_background').css('background-color',color); 
    }); 
}); 

當我連接到該頁面時,服務器日誌connection established所以我們至少去到這一點。然後我點擊一個按鈕,並在客戶端登錄clicked button_1,這就是最後的日誌記錄。如此看來,問題在於無論是socket.emit('change background event', val.attr('id'))socket.on('background change event', function(button){...})

我試圖改變我的socket.emit聲明發送ID在像一些socket.io實例對象,但也不能工作。 所以我需要做什麼改變,使這項工作?

P.S.這裏是我的版本信息:

node.js 0.8.11 
express 3.0.0rc4 
socket.io 0.9.10 

回答

3

在客戶端你有socket.on("change background", function...)代替background change,這是發出你正在做的服務器上。

+0

呵呵該事件被命名change background event。它的確是。也許我應該去檢查閱讀障礙。 ;) – Aust

1

在您的客戶端代碼,而在服務器上等待background change event