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 服务器的主要内容,如果未能解决你的问题,请参考以下文章