Socket.io émettre sur la Voie Expresse
Je veux émettre quelques données pour le client lors de certaines API route est appelée.
Je code suivant sur server.js
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
io.on('connection', function(socket){
console.log('a user connected');
socket.emit('tx', 'msg');
socket.on('disconnect', function(){
console.log('user disconnected');
});
});
J'ai maintenant cette route /test de:
var bsg = require('./routes/test');
Et que fichier:
var express = require('express');
var passport = require('passport');
var router = express.Router();
router.get('/test', function(req, res) {
//work here
});
module.exports = router;
Sur le côté client:
<script type="text/javascript">
var socket = io();
socket.on('tx', function(data) {
console.log(data);
});
</script>
Quel est la meilleure solution pour cela?
Merci!
Express 4 /socket.io 1.4.5
stackoverflow.com/questions/29334800/...
im en utilisant le module.les exportations = routeur, je ne peux pas faire les exportations = function(app,io)
eh bien si vous en faites une variable globale que vous avez à passer le
Ne sais pas comment le faire avec mon installation actuelle
Juste mis à jour fichier de route pour montrer mon installation
im en utilisant le module.les exportations = routeur, je ne peux pas faire les exportations = function(app,io)
eh bien si vous en faites une variable globale que vous avez à passer le
io
l'instance de votre itinéraire à l'utiliserNe sais pas comment le faire avec mon installation actuelle
Juste mis à jour fichier de route pour montrer mon installation
OriginalL'auteur mdv | 2016-06-01
Vous devez vous connecter pour publier un commentaire.
Fixer le
io
instance de votre application.Alors vous pouvez y accéder via la demande.
Si vous vous attendez à émettre des données à un seul client, vous devez garder une sorte de session de cartographie de lien autonome de la requête http à un socket. Un ID de session peut-être pas une association mais vous pouvez avoir de nombreux sockets ouvrir une session. Vous êtes mieux de traiter une demande/réponse modèle directement avec la prise.io rappels.
Si je fais cela sur /parcours d'essai: req.app.io.('connexion', function(socket) { socket.émettre ("tx", "quelques données'); }); client de recevoir des données, mais SEULEMENT sur la touche F5 (actualiser) de la page,
Ai eu de travail, juste eu à faire: req.app.io.émettre ("tx", data);
Personnellement, je préfère attacher le .io à la req. en tant que middleware avec ... // Faire io accessible à notre routeur app.utilisation(function(req, res, next) { 'use strict'; req.io = io; next(); }); Donc, tout ce que j'ai à faire est de req.io.emit() , ce Qui n'est pas différents, mais il sauve la .app
Est-ce une bonne idée ou est-il un bettter approche ?
OriginalL'auteur Matt
Vous pouvez joindre l'exemple à la req objet:
Et d'émettre à un seul client
req.io.to
? Je sais que la façon de le faire normalement c'estsocket.broadcast.emit
mais je ne peux pas trouver un moyen d'accéder àsocket
à partir de l'intérieur d'une route, seulementio
.OriginalL'auteur Amit Kumar