在node.js / socket.io中,如何判断某个对象是否是套接字的一个实例?

在我的应用程序socket传递,因为this使用bindcall

 socket.on( 'handle', someFunc.bind(socket) ); function someFunc() { var socket = this; ... anotherFunc.call( socket, 'abc', ... ); } 

我希望确保this确实是一个socket – 遗忘 – 使用func(...)而不是func.call(socket,...)

 function someFunc() { var socket = this; assert.ok( /* ensure this is instanceof a socket */ ); ... } 

我如何做出断言?

有我可以使用的io = require('socket.io')内的一些socket吗?

为了解决特定的问题,最好检查一下是否为空:

 function someFunc() { var socket = this; assert.ok(socket); ... } 

assert会失败someFunc(); 调用,只会传递给someFunc.bind(socket)();someFunc.call(socket); 调用(只要socket不为空)。

如Bergibuild议的那样,依靠实现细节,如果下一个Node.js版本具有不同的实现,则会导致应用程序不可用; 它似乎不是公共API的一部分。

从我在源代码中读到的 ,它返回一个Manager实例。 这个检查应该工作:

 var io = require('socket.io'); var socket = io.listen(...); socket instanceof io.Manager; // true