2011-11-05 71 views
0

我已經嘗試了一些使用iis節點的Windows Vista/IIS 7中的node.js。我的想法是在asp .net mvc應用程序上使用服務器腳本連接到另一個套接字服務器,並以持久方式提供請求。nodejs socket.io與IIS節點

我下載了IIS7的iisnode版本https://github.com/tjanczuk/iisnode,並且能夠在web.config和IIS模塊配置中使用http處理程序映射運行基本的'hello world'http服務器管道。

我想從node.js使用socket.io庫。如果我編寫服務器和客戶端,這將獨立工作。但與IIS節點一起使用時失敗。

我有問題進一步下去。像

  • 如何將npm模塊包含在asp .net mvc項目中?我試過 把node_modules放在節點腳本的文件夾中,但是 沒有幫助。基本上,require('socket.io')命令起作用,但套接字連接等僅僅失敗。
  • 如何擁有從客戶機的套接字連接 將繼續偵聽來自 服務器(如COMET)更新 - 正如我所說的,我試圖用socket.io

任何機構嘗試過這個?

+0

socket.io在哪裏失敗?你是否包含由socket.io服務器切斷的腳本?有可能IIS沒有正確處理websocket連接。 – btleffler

+0

我認爲它不知道在哪裏找到socket.io。在一個正常的node.js中,如果我把它放在node_modules下,就足夠了。但在IIS中,我不知道如何讓iisnode瞭解node_modules的位置。 – Muthu

回答

0

這可能與您的問題有關,也可能不會。我沒有用socket.io做過多的工作,但是我打算做一些與你所描述的非常相似的事情。當通過源iisnode讀書,我發現下面的代碼cnodehttpmodule.cpp:

this->applicationManager->GetEventProvider()->Log(L"iisnode received a new http request", WINEVENT_LEVEL_INFO); 

// reject websocket connections since iisnode does not support them 
// http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17#page-17 

PCSTR upgrade = pHttpContext->GetRequest()->GetHeader(HttpHeaderUpgrade, NULL); 
ErrorIf(upgrade && 0 == strcmp("websocket", upgrade), ERROR_NOT_SUPPORTED); 

在我看來彷彿若有「的WebSocket」包括在請求的頭,將被拒絕。我需要閱讀websocket協議來更好地理解這意味着什麼。

我會第一個承認我不太瞭解websockets與長期運行請求的不同之處。但據我所知,socket.io可以在不支持websockets的舊版瀏覽器上運行。

我建議您嘗試將傳輸設置爲xhr-polling或jsonp-polling。它有點擊敗了使用node.js的很酷的因素,但它可以幫助你解決你的問題。

+0

謝謝。我在使腳本瞭解應用程序中的額外節點模塊時也遇到問題?例如,通過將node_modules置於腳本所在的同一文件夾下,它不會理解同一文件夾中的任何其他js(通過調用require('./ myadditionalscript.js')或調用require('myadditionalscript')。 – Muthu

1

回覆a few months ago,IIS中的Socket.IO不支持WebSocket支持,但是長查詢是。

這是幾個月前,我現在遇到同樣的問題,並試圖解決。

正如托馬斯寫道:

請注意,iisnode不支持WebSocket的交通工具,但 使用socket.io仍然可以與其他基於HTTP的傳輸 像HTTP長輪詢:

io.configure(function() { 
    io.set('transports', ['xhr-polling']); 
}); 

By the looks of it,截至2012年2月23日,此功能仍不受支持。

您是否需要通過IIS?你有選擇去純粹的Socket.IO/Node選項,消除IISNode?如果您需要具備備用功能的完整WebSocket支持,這看起來像唯一的選擇,除非有其他建議?