【问题标题】:What Express websocket events exist?存在哪些 Express websocket 事件?
【发布时间】:2015-11-09 16:25:04
【问题描述】:

我想知道存在哪些 websocket 事件到目前为止我只使用了ws.on('message') 事件,但我想使用一个在建立和关闭连接时触发的事件。我尝试添加ws.on('connection'),但没有被触发。

我的代码:

app.ws('/', function (ws, req) {
    ws.on('message', function (textChunk) {
            //do stuff
        }
    });
});

我需要一些客户端编程来执行此操作吗?

我尝试添加这个,但是当我从我的客户端连接时它没有触发。

ws.on('request', function () {
  console.log("request");
});

【问题讨论】:

  • 我认为你需要做一些谷歌工作。一切都在那里供您查找,包括detailed specification。我发现MDN 是 webSocket 东西的有用起点。至于 node.js 文档,它通常不是很完整。我经常不得不依赖其他信息来源。
  • 我认为你需要处理 ws.on("request")。 express-ws 库拦截连接事件并引发另一个事件。
  • jfriend00 我通读了文档,但我不知道该怎么做...我不介意阅读,但您有什么更具体的吗?
  • 请更改此问题的标题以完全清楚此问题是关于 ExpressWS(一般不是 websockets)

标签: javascript node.js express websocket


【解决方案1】:

提供给app.ws 的函数是在打开新的websocket 时执行的函数。所以这样使用:

app.ws('/', function (ws, req) {

    console.log("New connection has opened!");

    ws.on('close', function() {
        console.log('The connection was closed!');
    });

    ws.on('message', function (message) {
        console.log('Message received: '+message);
    });
});

【讨论】:

    【解决方案2】:

    查看express-ws 的源代码后,您似乎可以执行以下操作。

    var express = require('express');
    var app = express();
    var expressWs = require('express-ws')(app);
    
    // get the WebsocketServer instance with getWss()
    // https://github.com/HenningM/express-ws/blob/5b5cf93bb378a0e6dbe6ab33313bb442b0c25868/index.js#L72-L74
    expressWs.getWss().on('connection', function(ws) {
      console.log('connection open');
    });
    
    // ... express middleware
    
    // ... websocket middle ware
    app.ws('/', function(ws, req) {
      ws.on('message', function(msg) {
        console.log(msg);
      });
    });
    
    app.listen(3000);

    旧响应

    有以下几种:

    close
    error
    message
    open
    

    https://developer.mozilla.org/en-US/docs/Web/API/WebSocket#Attributes

    【讨论】:

    • ws.on('open', function() { console.log("open"); });当我将它添加到代码中时,这并没有触发。为什么?
    • 查看 express-ws 中的代码后,它看起来像是自己处理连接。 github.com/HenningM/express-ws/blob/master/index.js#L36-L52我已经更新了我的回复。
    • 它说 getWss 和 ws 未定义:/
    • 很难说没有完整查看您的代码,您是否在与app.ws() 相同的文件中执行var expressWs = require('express-ws')(app);
    • 如果您正在执行我上面所说的操作并且仍然无法访问 getWss() 那么您可能使用的是旧版本。 github.com/HenningM/express-ws/commit/…
    【解决方案3】:

    好的,我又发现了一个实际触发的事件。现在,如果我能找到一个在打开连接时被调用一次就好了。

    app.ws('/', function (ws, req) {
    
        ws.on('close', function() {
            console.log('close connection');
        });
    
        ws.on('message', function (textChunk) {
                //do stuff
            }
        });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-22
      • 1970-01-01
      • 2017-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多