2015-06-25 63 views
0

我目前正在开发一个npm模块,应该用在更大的应用程序中。我的模块需要听一些socket.io事件,我不知道如何包括socket.ionpm模块中的Socket.io

我可以看到两个解决方案:

  • 要么我包括socket.io在我的模块中,并配置所有我的事件监听。然后我出口它使主应用程序可以附加它的服务器

  • 或者说,我让服务器配置的一切,让它当它调用我的模块socket.io模块,和配置我的事件监听应用程序提供的事件。

第一种解决方案的优点是不会强制主应用程序在其依赖项中包含socket.io(如果不需要)。

第二个解决方案强制主应用程序在其依赖项中包含socket.io,但似乎是此方法的最佳解决方案。

您对此有何看法?我是否应该将socket.io包含在模块中,并让主应用程序将其附加到服务器上,还是让主应用程序允许我访问其socket.io模块?

回答

0

我认为这样做的常见方法是让谁调用你的模块注入服务器对象。因此,您的模块调用如下:

require('myapp')(server); 

然后,在您的应用程序中,您可以将socket.io附加到服务器。

var io = require('socket.io')(server); 

此外,你可以有一个可选的选项参数,你可以直接进入socket.io。

require('myapp')(server,options); 

这有几个好处。 0配置,不要求用户要求socket.io,易于测试,如果需要可以进行配置。

+0

太好了,谢谢。但是,如果应用程序需要使用socket.io本身,则不会有问题吗? – MagicMicky

+0

你是否知道如果发生了什么 var io = require('socket.io')(app);被调用两次?这可能不是问题,但我不确定。 –

+0

那么,我会认为这两个'require('socket.io')'是socket.io的两个不同的实例。但是我来自Java背景,可能不适用于JS类。 – MagicMicky