为什么web socket在nodejs上performance不同?

我有一个Nodejs Server.js代码:

第一个概念:

var http = require('http'); var express = require('express'); var app = express(); var path = require('path'); var conn= http.createServer(app).listen(3000, function () { console.log("server Running at Port 3000"); }); var WebSocketServer = require('ws').Server; var wss = new WebSocketServer({server: conn}); 

我有一个java脚本的index.html代码:

 <html> <body> <script src="myscript.js"></script> </body> </html> 

myscript.js里面我有:

 var connection = new WebSocket('ws://localhost:3000'); 

当我在浏览器上打开http://localhost:3000时,这工作正常。

第二个概念:

我的server.js

 var WebSocketServer = require('ws').Server, wss = new WebSocketServer({ port: 3000}) ; wss.on('connection', function (connection) { }); wss.on('listening', function () { console.log("Server started..."); }); 

而HTML和客户端Java脚本与上面类似。

当我在浏览器上打开http://localhost:3000时,这不起作用。 为什么? 我想澄清我的疑问。 为什么第一种方法工作,第二种不工作?

为了特别回答你的问题: 为什么web socket在nodejs上performance不同? 答案是:不应该。 在代码的第二个版本中,您没有向端口3000上的客户端提供任何HTML或JS文件,因此浏览器无法下载任何HTML。

如果您希望按预期工作,则需要将一些HTML和JS文件提供给访问http:// localhost:3000 /的浏览器,否则将无法连接。

我写了一些示例代码 – 服务器端和客户端 – 如何使用WebSocket来完成你正在做的事情。 它在GitHub上提供 ,我最初写这个答案: socket.io和websockets之间的差异 。

这里的问题的源代码的相关部分是:

WebSocket服务器

使用Express.js的WebSocket服务器示例:

 var path = require('path'); var app = require('express')(); var ws = require('express-ws')(app); app.get('/', (req, res) => { console.error('express connection'); res.sendFile(path.join(__dirname, 'ws.html')); }); app.ws('/', (s, req) => { console.error('websocket connection'); for (var t = 0; t < 3; t++) setTimeout(() => s.send('message from server', ()=>{}), 1000*t); }); app.listen(3001, () => console.error('listening on http://localhost:3001/')); console.error('websocket example'); 

来源: https : //github.com/rsp/node-websocket-vs-socket.io/blob/master/ws.js

WebSocket客户端

使用vanilla JavaScript的WebSocket客户端示例:

 var l = document.getElementById('l'); var log = function (m) { var i = document.createElement('li'); i.innerText = new Date().toISOString()+' '+m; l.appendChild(i); } log('opening websocket connection'); var s = new WebSocket('ws://'+window.location.host+'/'); s.addEventListener('error', function (m) { log("error"); }); s.addEventListener('open', function (m) { log("websocket connection open"); }); s.addEventListener('message', function (m) { log(m.data); }); 

资料来源: https : //github.com/rsp/node-websocket-vs-socket.io/blob/master/ws.html

而不是debugging一个代码,它不工作,有时最好从一些工作,并从那里开始。 看看它是如何工作的,可以随意更改并在项目中使用它 – 它是在MIT许可下发布的 。