为什么web套接字在nodejs上的行为不同



我有一个Nodejs Server.js代码:

first概念:

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});

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

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

inside myscript.js i have:

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

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

second Concept:

my 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套接字在nodejs上的行为不同?答案是:不应该。在第二个版本的代码中,您没有在端口3000上向客户端提供任何HTML或JS文件,因此浏览器无法下载任何HTML。

如果你想让它像预期的那样工作,那么你需要为访问http://localhost:3000/的浏览器提供一些HTML和JS文件,否则它将无法连接。

我写了一些示例代码-服务器端和客户端-如何使用WebSocket来做你在这里想做的事情。它在GitHub上可用,我最初写它是为了这个答案:套接字之间的差异。IO和websockets。

与你的问题相关的源代码部分如下:

WebSocket服务器

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

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客户

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

与其调试不能运行的代码,不如从正常运行的代码开始调试。看看它是如何工作的,你可以自由地修改它,并在你的项目中使用它——它是在MIT许可下发布的。

相关内容

  • 没有找到相关文章

最新更新