2012-10-03 179 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