套接字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

socket.io 没有发送给所有客户端

Sailsjs 套接字 IO

socket io发出失败的回调

在重新连接、socket.io、node.js 时重用套接字 id

获取发射套接字的当前套接字 id