ユーザーがボタンを押すと、すべてのユーザーの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