express-ws 中间件无法正确创建 websocket 服务器

Posted

技术标签:

【中文标题】express-ws 中间件无法正确创建 websocket 服务器【英文标题】:can't create a websocket sever correctly by express-ws middleware 【发布时间】:2016-11-05 12:06:23 【问题描述】:

我正在使用 node.js 和 express 编写一个 websocket 服务器,并且我使用 express-ws 中间件来帮助我。但是客户端无法连接服务器。下面是我的代码。

app.js:

var app = express();
var expressWs = require("express-ws")(app);
...
var webso = require("./routes/ws");
app.use("/chat",webso);

路由/ws.js:

var express = require('express');
var router = express.Router();

router.ws("/",function(ws,req)
  console.log("socket from client")
  ws.on('message',function(msg)
    ws.send('back from node');
  )
);
module.exports=router;

客户:

wx.connectSocket(
        url:"ws://localhost:3000/chat",
        success()
            console.log("success")
        ,
        fail()
            console.log("err")
        ,
        complete()
            console.log("done");
        
    );

客户端无法连接websocket服务器:

asdebug.js:1 WebSocket connection to 'ws://localhost:3000/chat' failed: Connection closed before receiving a handshake response

我认为我在快递服务器上出了点问题。我需要你的帮助。

【问题讨论】:

【参考方案1】:

您是否在 app.js 中使用 app.listen(3000) 来打开该端口? Websockets 只是对 HTTP(s) 的升级,因此您可以在与其他路由相同的端口上运行。

从外观上看,您的服务器端代码很好 - 但不确定客户端代码。这工作正常并在打开时输出“来自客户端的套接字”:

app.js

var express = require('express');
var app = express();
var expressWs = require("express-ws")(app);
var webso = require("./ws.js");
app.use("/chat",webso);
app.listen(3000);

ws.js

var express = require('express');
var router = express.Router();
router.ws("/",function(ws,req)
  console.log("socket from client")
  ws.on('message',function(msg)
    ws.send('back from node');
  )
);
module.exports=router;

test.htm

<script type="text/javascript">
    websocket = new WebSocket('ws://localhost:3000/chat');
</script>

【讨论】:

是的,我做到了,如何请求服务器? 'ws://localhost:3000/chat' 或 'localhost:3000/chat' ? 是的ws://localhost:3000/chat 是对的。嗯。节点有错误吗? 不行,只是客户端连接不上 我测试了一下,是服务器的问题 如果这个答案现在对你有用,为什么会被接受?

以上是关于express-ws 中间件无法正确创建 websocket 服务器的主要内容,如果未能解决你的问题,请参考以下文章

为 Express 定义 Websocket 路由

在 express-ws 应用程序和打字稿中使用 Sessions

节点服务器不使用 express-ws

express-ws 部署到 VPS 服务器时不处理调用

中间件无法授权[关闭]

ASP.NET Web 应用程序无法使用自定义引导程序正确显示内容