如何从另一个模块发送套接字消息?

时间:2017-09-16 06:47:41

标签: node.js sockets express socket.io

我的申请现在按照“教科书”的结构如下:

文件app.js:

var app = require("express").express();
var api = require("./routes/api"); //just an example of one route
app.use("/api",api);
...
var server = app.listen(8081);
var sockets = require("./routes/sockets")(server);

文件路径/ api.js:

var router = require("express").router;
route.get("/test", function(req,res) {
   res.render("test.pug");
}

router.get("/f", function(req, res) {
  //...some processing...
  //I want to send a socket message here to a given socket id !!!
  //
}
module.exports = router;

文件routes / sockets.js:

module.exports = function (server) {
   var io - require("socket.io")(server);

   io.use("....

   io.on("connection",function(socket) {
     socket.on("....
     socket.on("....
   }
}

以上工作适用于我的网页,例如/api/test,它直接与sockets.js中的套接字函数对话。我现在需要的是能够从api.js内部向特定套接字ID发送套接字消息,如!!!所示。我该怎么做?

2 个答案:

答案 0 :(得分:0)

在一个班轮中使用

io.to(socket_id).emit('msgtcln');

完整示例(将3个文件合并为一个)。

"use strict";
var app = require("express")();

app.get("/test", function(req, res) {
  res.send("Sending Hello");
  io.to(id[0]).emit('msgtcln', {/* 3 */
    name:"Sending data"
  });

});

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

var server = app.listen(3000);


var io = require('socket.io')(server);

let id = [];

io.sockets.on('connection', function(socket) {
  console.log("Socket connected");
  id[0] = socket.id;
  socket.on('disconnect', function(opt, cb) {
    console.log("Socket disconnected");
  });
});

这里我只是在/ test路由命中时通过id数组发送数据,你必须根据需要维护socket_id。

答案 1 :(得分:0)