2015-06-25 64 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