所以我试图建立一个网站,它也有 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 吗?
我有两个版本的睡眠功能,一个正在等待解决,另一个不是:
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 解决,这正是我在这里问的,除了我使用的是异步等待。我也没有得到解释。有人可以向我解释为什么会这样吗?