2011-11-05 147 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支持,这看起来像唯一的选择,除非有其他建议?