nodejs-websocket检测非websocket连接尝试

时间:2015-07-06 03:35:55

标签: node.js websocket

我正在使用nodejs-websocket模块运行websocket服务。

我想在未使用websocket协议的连接尝试时检测并采取一些操作。

我想过使用setTimeout(n)并在conn.readystate从'连接'变为'打开'或者在计时器到期时采取行动时清除超时但是我希望有更直接的方式

如何检测非websocket连接尝试?

2 个答案:

答案 0 :(得分:2)

webocket协议启动每个与HTTP请求的连接,其头标集为" request"升级到webSocket协议。当服务器同意时,它会响应升级,客户端和服务器都会将协议更改为webSocket协议。

因此,非webSocket连接尝试将是普通的HTTP连接,或者它只是一个甚至不是HTTP的套接字连接尝试。因此,在任何一种情况下,连接都将在HTTP服务器上作为404(Web服务器没有响应的HTTP请求)或作为无效协议(不是HTTP)而死亡。

答案 1 :(得分:0)

Connection有一个错误事件,因此您可以执行Connection.on('error', function(err) ...。这将意味着连接出现问题,但我不相信你可以对此时的连接做任何事情。

一个建议是使用可以在HTTP / Connect / Express服务器上派对的Socket.io。它可以说HTTP(Kinda)或WebSockets。然后你可以做类似的事情:

var app = require('express')();
var server = require('http')
  .Server(app);
var io = require('socket.io')(server);

server.listen(3000);

app.get('/*', function(req, res) {
  res.json({
    hello: 'world'
  });
});

io.on('connection', function(socket) {
  socket.emit('news', {
    hello: 'world'
  });
  socket.on('my other event', function(data) {
    console.log(data);
  });
});

这包含/Socket.io/*路径下的所有Socket.io连接。任何其他连接将由app.get('/*',...)调用处理。这只会捕获http请求。