套接字IO - socket.emit每次触发两次事件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了套接字IO - socket.emit每次触发两次事件相关的知识,希望对你有一定的参考价值。
socket.js:
var state = {
io: null
}
exports.init = function(io) {
state.io = io;
}
exports.get = function() {
return state.io;
}
exports.emit = function(message, data) {
console.log("emitting")
state.io.emit(message, data);
}
exports.onConnection = function(callback) {
state.io.once('connection', function (socket) {
callback(socket);
});
}
tags.js:
router.get('/', function (req, res) {
var DeviceIdentifier = 'WILL'
var NDefRecord = 'FROM_WILL'
req.headers['x-name'] = DeviceIdentifier
req.headers['x-content'] = NDefRecord
console.log("tags.js: GET");
socket.emit("tag:scan", {name: "000000000a0d9439", content: "adsf});
})
server.js
var io = require('socket.io')(server);
var socket = require('./socket');
socket.init(io);
socket.onConnection(function (data) {
console.log("Got Connection");
console.log(data);
});
无论我怎么做,socket.emit函数被调用两次,数据也被存储两次。
我试过查找很多例子,问题似乎仍然存在
任何帮助,将不胜感激。
谢谢!
答案
只需添加res.send。您没有向浏览器发送任何响应,因此他尝试在x秒后刷新
router.get('/', function (req, res) {
var DeviceIdentifier = 'WILL'
var NDefRecord = 'FROM_WILL'
req.headers['x-name'] = DeviceIdentifier
req.headers['x-content'] = NDefRecord
console.log("tags.js: GET");
socket.emit("tag:scan", {name: "000000000a0d9439", content: "adsf});
res.send('ok');
})
以上是关于套接字IO - socket.emit每次触发两次事件的主要内容,如果未能解决你的问题,请参考以下文章
c# SocketIoClientDotNet, node js socket.IO