我正在努力做到这一点,当用户按下按钮时,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'))
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