小编Klo*_*oud的帖子

带有 express 和 websocket 的 Node.js 在 WebSocket 握手期间出错:意外响应代码:200

所以我试图建立一个网站,它也有 websockets,其中 http-server 和 websocket 都在同一个端口上侦听:

const WebSocket = require('ws');
var express = require('express');
var app = express();


wss = new WebSocket.Server({server : app});

app.get('/', function(req, res){

    res.send('hello world!');
});


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

  ws.send('some text');
});


app.listen(8080, function(){

    console.log('app started');
});
Run Code Online (Sandbox Code Playgroud)

如果我然后在 chrome 浏览器中加载服务器网站,我会收到“hello world!”的问候。到现在为止还挺好。但是如果我打开 webconsole 并尝试连接

var exampleSocket = new WebSocket("ws://192.10.10.30:8080");
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

与“ws://192.10.10.30:8080/”的 WebSocket 连接失败:WebSocket 握手期间出错:意外响应代码:200

我的第一个想法是,我必须明确声明一个 http-server 吗?

但是我在 Node.js 上阅读了这篇文章 Serve WebSocket and HTTP server at …

javascript websocket node.js express

3
推荐指数
1
解决办法
2541
查看次数

为什么我不能直接在 SetTimeout 函数中为 Promise 调用 resolve()

我有两个版本的睡眠功能,一个正在等待解决,另一个不是:

function sleephelper1(ms) {
    return new Promise(function(resolve) {
        setTimeout(() => resolve('done'), ms);
    })
  }

  function sleephelper2(ms) {
    return new Promise(function(resolve) {
        setTimeout(resolve('done'), ms);           
    })
  }
Run Code Online (Sandbox Code Playgroud)

然后我调用 sleephelper1 或 sleephelper2:

async function test(){
var test = await sleephelper1(3000);
console.log(test)
console.log("exit test function")
  }

test()
Run Code Online (Sandbox Code Playgroud)

第一个在解析前等待 3 秒。但是 sleephelper2 无法正常工作。代码立即执行。我认为 SetTimeout 可以将函数的调用延迟给定的时间。resolve() 不是函数吗?我发现这篇文章JavaScript 承诺用 setTimeout 解决,这正是我在这里问的,除了我使用的是异步等待。我也没有得到解释。有人可以向我解释为什么会这样吗?

javascript settimeout resolve node.js async-await

1
推荐指数
1
解决办法
87
查看次数