【问题标题】:nowjs - refusing a client connectionnowjs - 拒绝客户端连接
【发布时间】:2011-06-17 14:33:47
【问题描述】:

我有一个 nowjs 问题:

如何拒绝来自连接事件的事件处理程序的客户端连接?

我想在客户端连接时检查服务器上的一些值,然后决定是断开连接还是让他连接。

好的,因为 stackoverflow 认为我的问题在某种程度上低于他们的质量标准,我会尝试添加代码示例...

everyone.on('connect', function(){
    if (!niceClient) {
        // do something to kick him out
    }
});

提前致谢!

【问题讨论】:

  • 是的,添加一个代码示例(或多个),最好是一个指示工作流的文档化代码示例,总是会提出更好的问题。我鼓励你把这个问题再充实一点,甚至。 tinyurl.com/so-hints
  • 是的,你是绝对正确的,但在这种情况下,代码示例对我来说似乎非常明显。但我保证将来会更好,吸取教训。

标签: javascript node.js nowjs-sockets


【解决方案1】:

我不确定 nowjs 的具体细节,但使用普通的 node.js 你可以这样做:

var http = require('http')
http.createServer(function (req, res) {
  // ...
}).on('connection', function(sock) {
  if (!niceClient) {
    sock.end(); // Close the client connection.
  }
}).listen(8080, 'localhost');

看起来 nowjs 只是包装了一个节点 HTTP 服务器,所以大概这种“连接”事件侦听器也可以与该库一起使用。

【讨论】:

  • 这实际上可能太低而无法验证 nowjs 连接,因为 nowjs 的东西在套接字连接之后。但感谢您的提示,它给了我一些进一步检查的想法。
【解决方案2】:

试试这个

nowjs.on('connect', function(){
    nowjs.getClient(this.user.clientId, function(err){ 
        var address = this.socket.handshake.address;
        //@todo test if ip is blocked or banned
        console.log("New connection from " + address.address + ":" + address.port);

         //bla bla bla ....
           if (!niceClient) {
               this.socket.end(); // Close the client connection.
           }               
    });
});

【讨论】:

    【解决方案3】:

    我现在发现 nowjs 中还没有(还)实现访问控制。这可能是以后添加的一个功能,但到目前为止,除了实施一个本土解决方案之外没有什么可做的。

    我现在将解决这个问题:

    所有相关操作都是通过一个组(例如“niceusers”)完成的,并且在成功验证后,用户将被放置在该组中。如果没有成功的验证,他将继续处于“边缘”状态并且不会收到该组的任何通信。

    这解决了我的情况,但对于真正的访问控制可能还不够。

    仍然希望这可能对某人有所帮助!

    【讨论】:

      猜你喜欢
      • 2019-02-28
      • 1970-01-01
      • 2016-04-22
      • 2016-09-15
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-15
      • 2021-10-16
      相关资源
      最近更新 更多