socket.on()和socket.emit()失败

时间:2012-10-03 19:17:46

标签: jquery node.js socket.io multiplayer

我试图这样做,当用户按下按钮时,div的背景将改变所有用户的颜色。但那并没有发生。这是socket.onsocket.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

2 个答案:

答案 0 :(得分:3)

在客户端,您有socket.on("change background", function...)而不是background change,这是您在服务器上执行的发送。

答案 1 :(得分:1)

在客户端代码中,事件在服务器上等待change background event

时命名为background change event