当其中一个服务器文件中有 websocket 时,如何停止 Ember CLI 的 http-mock 服务器抛出错误?

How to stop Ember CLI's http-mock server throwing an error when there are websockets in one of the server files?

我的一个 http-mock 服务器文件中有一个 websocket,初始化如下:

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)

我猜我需要检测何时发生文件更改并关闭当前的 websocket 连接。 On process exit 似乎直到服务器死机才被调用,然后 process.on('exit', function() {}) 被称为服务器刷新的次数。它并没有太困扰我,因为我有一个脚本可以在 ember 服务器出现故障时重新启动它,但是其他开发人员不喜欢 ember 服务器在编辑服务器文件时出现故障。有什么想法吗?

您是否应该 closing/terminating 关闭 上的连接?

我最终将一个新的 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.
});