Javascript socket.io发出多条消息

Javascript socket.io发出多条消息,javascript,node.js,express,socket.io,Javascript,Node.js,Express,Socket.io,出于某种原因,socket.io在应该只发送一条消息的情况下发送了多条消息。我想这也会造成一种脱节。知道为什么会这样吗 var Campfire = require("../lib/campfire").Campfire, express = require("express"), app = require('express')(), server = require('http').createServer(app), io = require('socke

出于某种原因,socket.io在应该只发送一条消息的情况下发送了多条消息。我想这也会造成一种脱节。知道为什么会这样吗

var Campfire = require("../lib/campfire").Campfire,
    express = require("express"),
    app =  require('express')(),
    server = require('http').createServer(app),
    io = require('socket.io').listen(server);

server.listen(1337);

app.set('views', __dirname + '/tpl');
app.set('view engine', "jade");
app.engine('jade', require('jade').__express);
app.use(express.static(__dirname + '/public'));

app.get("/", function(req, res){
  res.render("page");
});

// catch all random errors and print them out
process.on('uncaughtException', function (err){
  console.error(err);
});

var instance = new Campfire({
  ssl     : true,
  token   : "MYTOKEN",
  account : "MYACCOUNT"
});


//////////////////
// EMPLOYEES
//////////////////
var lukasz = {name: "Lukasz", id: 1216806, status: ""};
var dana = {name: "Dana", id: 1054576, status: ""};
var users = [lukasz, dana];

function returnUsernameUsingID(userID){
    for (var j=0; j<users.length; j++) {
        if (users[j].id == userID) return users[j].name;
    }
    return -1;
}

function wordIsInSentence(theWord, theSentence){
  if (theSentence.indexOf(theWord) > -1) {
    return true;
  } else {
    return false;
  }
}
////////////////
// Campfire API
////////////////

instance.join(571821, function(error, room) {
  room.listen(function(message) {
    var username = returnUsernameUsingID(message.userId);
    if (wordIsInSentence("wfh", message.body)) {
      room.speak(username+" is working from home");
      io.sockets.emit('message', { message: username+",wfh" });
    }else if (wordIsInSentence("back", message.body)) {
      room.speak(username+" is back");
      io.sockets.emit('message', { message: username+",back" });
    }else if (wordIsInSentence("out", message.body)) {
      room.speak(username+" is out");
      io.sockets.emit('message', { message: username+",out" });
    }else if (wordIsInSentence("help", message.body)) {
      console.log(message);
      room.speak("your user ID is: "+message.userId+"\n/wfh - working from home \n/back - in office and available \n/headsdown - in office but busy \n/sick - outsick \n/vacation - on vacation \n/out - out for the day");
    }else if (wordIsInSentence("id", message.body)) {
      console.log(message);
      room.speak("your user ID is: "+message.userId);
    }else {
      console.log("Received unknown message:");
      console.log(message);
    }
  });
});

您同时使用room.speak和io.sockes.emit。那会是你的问题吗?否则你能举个例子说明到底出了什么问题吗?您要发送哪条消息,您希望返回哪条消息,…room.speak将消息写入聊天室,而io.sockets.emit将消息发送到套接字,因此它们都执行不同的操作,您需要套接字发出消息才能使room.speak正常工作(条件必须通过)我更新了描述,当它开始做奇怪的事情时会发生什么。我也有同样的问题。你有什么解决办法吗?我没有。花了很多时间试图弄明白,从它的声音,这可能是核心节点的问题。js只是没有时间来跟踪它。
   debug - websocket writing 5:::{"name":"message","args":[{"message":"Lukasz,back"}]}
   debug - websocket writing 5:::{"name":"message","args":[{"message":"-1,back"}]}
   debug - websocket writing 5:::{"name":"message","args":[{"message":"-1,back"}]}
   debug - websocket writing 5:::{"name":"message","args":[{"message":"-1,back"}]}
   debug - websocket writing 5:::{"name":"message","args":[{"message":"-1,back"}]}