2017-09-16 6 views
0

J'ai un websocket dans un de mes fichiers de serveur http maquette initialisées comme suit:Comment arrêter le serveur http-mock de Ember CLI en lançant une erreur lorsqu'il y a des sockets Web dans l'un des fichiers du serveur?

var WebSocketServer = require('ws').Server; 
var socketServer = new WebSocketServer({port: 13434, path: "/update"}); 

et plus tard dans le fichier que je donne les résultats suivants se produire sur la connexion:

socketServer.on('connection', function(ws) { 
    ws.on('close', function(message) { 
     clearInterval(sendResults); 
    }); 

    ws.on('message', function(message) { 
     handleClientMessage(ws, message); 
    }); 

    sendResults = setInterval(function() { 
     ws.send(JSON.stringify(getResultsFromEntries())); 
    }, resultInterval); 
}); 

Cependant, chaque fois que je modifier l'un des fichiers du serveur que je reçois l'erreur suivante:

File changed: "mocks/entry.js" 

Just getting started with Ember? Please visit http://localhost:4200/ember-getting-started to get going 

events.js:141 
     throw er; // Unhandled 'error' event 
    ^

Error: listen EADDRINUSE 0.0.0.0:13434 
    at Object.exports._errnoException (util.js:907:11) 
    at exports._exceptionWithHostPort (util.js:930:20) 
    at Server._listen2 (net.js:1250:14) 
    at listen (net.js:1286:10) 
    at net.js:1395:9 
    at nextTickCallbackWith3Args (node.js:453:9) 
    at process._tickCallback (node.js:359:17) 

Je suppose que je dois détecter le changement de fichiers se produit et fermez le curre nt connexion websocket. Sur le processus exit ne semble pas être appelé jusqu'à ce que le serveur meurt, et ensuite process.on ('exit', function() {}) est appelé le nombre de fois que le serveur a été actualisé. Cela ne me dérange pas trop car j'ai un script qui redémarre le serveur d'ember si ça tombe en panne, mais d'autres développeurs n'aiment pas que le serveur d'ember descende quand ils éditent un fichier de serveur. Des idées?

Répondre

1

Je fini par établir un nouveau WebSocketServer comme propriété de processus (qui persiste sur le serveur se redémarré), puis en haut du fichier je ferme la WebSocketServer précédente (s'il y avait un):

if (process["updateSocketServer"]) { 
    process["updateSocketServer"].close(); 
    process["updateSocketServer"] = undefined; 
} 

configuration Puis une nouvelle WebSocketServer:

process["updateSocketServer"] = new WebSocketServer({port: 13434, path: "/update"}); 

Puis je l'ai fait ce qui suit sur la connexion:

process["updateSocketServer"].on('connection', function(ws) { 
    // Connection code. 
}); 
0

Si vous fermez/mettez fin à la connexion sur , fermez?

+0

Merci pour la réponse. De près n'a pas semblé être appelé quand un fichier de serveur a changé, mais j'ai réussi à le faire fonctionner. – KroneckerDeIta