1

我已经使用 iis 节点在 windows vista/IIS 7 中尝试了一些 node.js。我的想法是在 asp .net mvc 应用程序上使用服务器脚本来连接到另一个套接字服务器并以持久的方式提供请求。

我在https://github.com/tjanczuk/iisnode下载了适用于 IIS 7 的 iisnode 版本,并且能够使用 web.config 和 IIS 模块配置中的 http 处理程序映射运行基本的“hello world”http 服务器管道。

我正在尝试使用 node.js 中的 socket.io 库。如果我编写服务器和客户端,这将独立工作。但与 IIS 节点一起使用时失败。

我在进一步下降时遇到问题。像这样的问题

  • 如何在 asp .net mvc 项目中包含 npm 模块?我尝试将 node_modules 放在节点脚本的文件夹中,但这没有帮助。基本上 require('socket.io') 命令可以工作,但是套接字连接等根本失败。
  • 如何从客户端建立一个套接字连接,该连接将继续侦听来自服务器的更新(如 COMET) - 正如我所说,我正在尝试使用 socket.io

有没有人试过这个?

4

3 回答 3

2

回顾几个月前,IIS 下的 Socket.IO 不支持 WebSocket 支持,但是长轮询是。

这是几个月前的事了,我现在遇到了同样的问题并试图解决。

正如 Tomasz 所写:

请注意,iisnode 不支持 websocket 传输,但在其他基于 HTTP 的传输(如 HTTP 长轮询)中仍然可以使用 socket.io:

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

从外观上看,截至 2012 年 2 月 23 日,此功能仍不受支持。

你需要通过IIS吗?您是否可以选择使用纯 Socket.IO/Node 选项来消除 IISNode?如果您需要具有回退功能的完整 WebSocket 支持,这似乎是唯一的选择,除非有其他建议?

于 2012-03-05T16:40:17.427 回答
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 将适用于不支持 websocket 的旧浏览器。

我建议您尝试将传输设置为仅 xhr-polling 或 jsonp-polling。它有点破坏了使用 node.js 的酷炫因素,但它可能会帮助您解决问题。

于 2011-11-05T21:50:31.487 回答
0

如果您的 socket.io Web 应用程序托管在 IIS 虚拟目录中,则与自托管情况相比,必须修改 socket.io 配置。有关详细信息,请参阅http://tomasz.janczuk.org/2013/01/hosting-socketio-websocket-apps-in-iis.html

此外,从 0.2.x 版本开始,iisnode 确实支持 Windows 8 和带有 IIS 8 的 Windows Server 2012 上的 WebSockets。查看http://tomasz.janczuk.org/2012/11/how-to-use-websockets-with- nodejs-apps.html了解详情。

于 2013-02-06T21:43:48.820 回答