0

我正在努力做到这一点,当用户按下按钮时,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'))or socket.on('background change event', function(button){...})

我曾尝试更改我的 socket.emit 语句以在一些 socket.io 示例中的对象中发送 id,但这也不起作用。那么我需要改变什么来完成这项工作?

PS这是我的版本信息:

node.js    0.8.11
express    3.0.0rc4
socket.io  0.9.10
4

2 回答 2

3

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

于 2012-10-03T19:39:13.487 回答
1

在您的客户端代码中,事件change background event在它等待的服务器上被命名background change event

于 2012-10-03T19:41:07.963 回答