我有一个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许可下发布的。