Как остановить, чтобы сервер http-mock CLI Ember выдавал ошибку, когда в одном из файлов сервера есть веб-сокеты?
У меня есть websocket в одном из моих файлов http-mock сервера, инициализированный следующим образом:
var WebSocketServer = require('ws').Server;
var socketServer = new WebSocketServer({port: 13434, path: "/update"});
и позже в файле у меня происходит следующее соединение:
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);
});
Однако всякий раз, когда я редактирую любой из файлов сервера, я получаю следующую ошибку:
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)
Я предполагаю, что мне нужно определить, когда происходит изменение файла, и закрыть текущее соединение с веб-сокетом. При выходе из процесса, похоже, не вызывается до тех пор, пока сервер не умрет, а затем process.on('exit', function() {}) вызывается число раз, которое сервер обновлял. Меня это не сильно беспокоит, так как у меня есть скрипт, который перезапускает сервер ember, если он выходит из строя, но другим разработчикам не нравится, когда сервер ember отключается при редактировании файла сервера. Есть идеи?
2 ответа
В итоге я установил новый WebSocketServer как свойство процесса (которое сохраняется после перезапуска сервера), а затем в верхней части файла я закрываю предыдущий WebSocketServer (если он был):
if (process["updateSocketServer"]) {
process["updateSocketServer"].close();
process["updateSocketServer"] = undefined;
}
Затем настройте новый WebSocketServer:
process["updateSocketServer"] = new WebSocketServer({port: 13434, path: "/update"});
Затем я сделал следующее на связи:
process["updateSocketServer"].on('connection', function(ws) {
// Connection code.
});