ne peut pas créer un serveur Websocket correctement avec le middleware express-ws

J’écris un serveur Websocket en utilisant node.js et express, et j’utilise le middleware express-ws pour m’aider. Mais le client ne peut pas connecter le serveur. Voici mon code.

app.js:

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

routes / 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; 

le client:

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

le client ne peut pas connecter le serveur websocket:

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

Je pense que quelque chose de faux que j’ai fait au serveur express. J’ai besoin de votre aide.

Faites-vous un app.listen(3000) dans app.js pour ouvrir ce port? Les Websockets sont simplement une mise à niveau vers HTTP (s), vous pouvez donc exécuter le même port que le rest de vos routes.

Il semble que votre code côté serveur soit correct – vous n’êtes pas sûr du côté client. Cela fonctionne très bien et sort le ‘socket du client’ à l’ouverture

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