套接字 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);
  });
}

标签.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});

})

服务器.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');
})

最新更新