Как остановить, чтобы сервер 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.
});

Вы должны закрыть / разорвать соединение при закрытии?

Другие вопросы по тегам