我正在尝试使用 HTML5 Web 套接字为基于 jQuery 的前端构建 ExpressJS Websocket 后端。
ExpressJS 后端代码实际上是从 https://github.com/websockets/ws#expressjs-example 复制粘贴的
JavaScript前端代码是:
var socket = new WebSocket("ws://localhost:8080");
socket.onopen = function(){
console.log( "OPENED : ", socket.readyState );
}
socket.onmessage = function(msg){
console.log( msg );
}
socket.onclose = function(){
console.log( "CLOSED : ", socket.readyState );
}
setTimeout(function(){
socket.send('test');
}, 2000);
在 Chrome 中,我收到错误:“连接在收到握手响应之前已关闭”。我在网上寻找解决方案,但它们都是基于 socket.io 的,而我只是使用 NodeJS ws 包。
任何提示将不胜感激。
最佳答案
后端代码:
const express = require('express')
const http = require('http')
const WebSocket = require('ws')
var path = require('path')
const app = express()
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname + '/a.html'))
})
const server = http.createServer(app)
const wss = new WebSocket.Server({ server })
wss.on('connection', function connection (ws, req) {
ws.on('message', function incoming (message) {
console.log('received: %s', message)
})
ws.send('something')
})
server.listen(8080, function listening () {
console.log('Listening on %d', server.address().port)
})
唯一的变化是第 8 行的 app.get
,而不是您提供的链接中提供的 app.use
。
并且a.html
文件只有前端脚本:
<html>
<head>
</head>
<body>
<script>
var socket = new WebSocket("ws://localhost:8080");
socket.onopen = function () {
console.log("OPENED : ", socket.readyState);
}
socket.onmessage = function (msg) {
console.log(msg);
}
socket.onclose = function () {
console.log("CLOSED : ", socket.readyState);
}
setTimeout(function () {
socket.send('test');
}, 2000);
</script>
</body>
</html>
一切都工作正常。
您说您正在端口 3000 上运行服务器,但您正在尝试在前端代码中连接到端口 8080。这是一个错误吗?
关于javascript - 使用 ExpressJS 和 Jquery 的基本 Web Socket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46045768/