我的目的是使用 Node.js + Socket.IO 制作一个聊天应用程序,但我遇到了一个困难。 问题是 minus
事件不能正常工作(结果:64 - 12 = 65),但是 plus
事件工作正常(结果:42 + 23 = 65 ). 也许问题的原因与 socket.once()
函数有关...但我不清楚答案。
以下是我简化的 Node.js 应用程序的源代码。
app.js:
var http = require('http');
var fs = require('fs');
var socketio = require('socket.io');
var app = http.createServer(function (req, res) {
if (req.url === '/') {
fs.readFile(__dirname + '/index.html', function (err, result) {
if (err)
throw err;
res.writeHead(200, {
'Content-Type': 'text/html'
});
res.end(result);
});
} else {
res.writeHead(404);
res.end();
}
});
app.listen(3000, function () {
console.log('The server running on port 3000.');
});
var io = socketio(app);
io.on('connection', function (socket) {
socket.on('plus', function (param) {
socket.emit('result', param.a + param.b);
});
socket.on('minus', function (param) {
socket.emit('result', param.a - param.b);
});
});
index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title></title>
<script src="http://cdn.socket.io/socket.io-1.0.6.js"></script>
<script>
var socket = io();
socket.emit('plus', {
a: 42,
b: 23
});
socket.once('result', function (result) {
var div = document.createElement('div');
div.innerText = '42 + 23 = ' + result;
document.body.appendChild(div);
});
socket.emit('minus', {
a: 64,
b: 12
});
socket.once('result', function (result) {
var div = document.createElement('div');
div.innerText = '64 - 12 = ' + result;
document.body.appendChild(div);
});
</script>
</head>
<body>
</body>
</html>
结果:
42 + 23 = 65
64 - 12 = 65
谢谢。
请您参考如下方法:
因为您同时在“结果”上绑定(bind)了两个事件回调。
<script>
var socket = io();
socket.emit('plus', {
a: 42,
b: 23
});
socket.once('result', function (result,obj) {
var div = document.createElement('div');
div.innerText = '42 + 23 = ' + result;
document.body.appendChild(div);
socket.emit('minus', {
a: 64,
b: 12
});
socket.once('result', function (result,obj) {
var div = document.createElement('div');
div.innerText = '64 - 12 = ' + result;
document.body.appendChild(div);
});
});
</script>