1

我有一个快速应用程序和一个 websocket 脚本。我创建服务器并在 www.js 文件中启动 express 应用程序。

我面临的问题是,我无法在 www.js 文件中实例化 websocket。

这是 www.js

....
const server = http.createServer(app);
server.listen(port);
server.on("error", onError);
server.on("listening", onListening);
....

这是 websocket.js

const WebSocket = require('ws');

const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', function connection(ws) {
  ws.on('message', function incoming(message) {
    console.log('received: %s', message);
  });

  ws.send('something');
});

我知道该行const wss = new Websocket.Server({ port: 8080 });创建了 websocket 实例......但我希望能够在 www.js 文件中创建这个实例,并将 websocket 的所有逻辑创建在一个单独的文件中。

4

1 回答 1

1

将 http 服务器实例传递给 websocket 服务器,

const wss = new Websocket.Server({ server: server });

如果要将其作为单个模块分离到文件中,

const WebSocket = require('ws');


const initWSServer = (server) => {
  const wss = new WebSocket.Server({ server: server});

  wss.on('connection', function connection(ws) {

    ws.on('message', function incoming(message) {
      console.log('received: %s', message);
    });

    ws.send('something');

  });
}

module.exports = {
  initWSServer
}

然后,

const server = http.createServer(app);
server.listen(port);
server.on("error", onError);
server.on("listening", onListening);

const ws_server = require('./websocket.js');
ws_server.initWSServer(server);
于 2019-03-25T05:24:22.077 回答