2017-09-16 6 views
0

ist meine Anwendung nun nach "Lehrbuch" wie folgt strukturiert:Wie sende ich eine Socket-Nachricht von einem anderen Modul?

Datei 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); 

Datei-Routen/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; 

Datei-Routen/Buchsen. js:

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

    io.use(".... 

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

Das obige funktioniert gut für meine Webseiten, zB /api/test, die direkt mit Socket-Funktionen in sockets.js sprechen. Was ich jetzt brauche, ist in der Lage zu sein, eine Socket-Nachricht von api.js an eine spezifische Socket-ID zu senden, wie unter !!! gezeigt. Wie mache ich es?

Antwort

0

In einzeiler verwenden

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

Voll Beispiel (Kombination 3-Datei in einem).

"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"); 
    }); 
}); 

Hier bin ich einfach das Senden von Daten durch id-Array, wenn/Teststrecke getroffen wird, haben Sie socket_id nach Ihrem Bedarf zu erhalten.

+0

Danke, aber in der realen Welt ist es nicht praktisch, alles in einer Datei zu haben. Mein Problem war, wie man das io 'Server' Objekt anderen Modulen (Dateien) zugänglich macht, speziell api.js. Ich habe eine Umgehungsmethode ausgearbeitet, und es funktioniert. Kann die Antwort später veröffentlichen. –

Verwandte Themen