0

ユーザーがボタンを押すと、すべてのユーザーのdivの背景の色が変わるようにしようとしています。しかし、それは起こっていません。それは私の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.ioの例のように、socket.emitステートメントを変更してオブジェクトで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 に答える