0

我的一个 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 连接。在服务器死亡之前似乎不会调用进程退出,然后 process.on('exit', function() {}) 被称为服务器刷新的次数。它不会让我太困扰,因为我有一个脚本可以在 ember 服务器出现故障时重新启动它,但是其他开发人员不喜欢在编辑服务器文件时 ember 服务器出现故障。有任何想法吗?

4

2 回答 2

1

我最终设置了一个新的 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.
});
于 2017-09-21T15:36:19.913 回答
0

您是否应该在close时关闭/终止连接?

于 2017-09-21T13:11:12.477 回答