为什么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许可下发布的 。