我试图这样做,当用户按下按钮时,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.emit语句以在一些对象中发送id,就像在一些socket.io示例中那样,但是这也不起作用。 那么我需要做些什么来改变它呢?
P.S。这是我的版本信息:
node.js 0.8.11
express 3.0.0rc4
socket.io 0.9.10
答案 0 :(得分:3)
在客户端,您有socket.on("change background", function...)
而不是background change
,这是您在服务器上执行的发送。
答案 1 :(得分:1)
在客户端代码中,事件在服务器上等待change background event
background change event