【问题标题】:nodejs socket.io with IIS Node带有 IIS 节点的 nodejs socket.io
【发布时间】:2011-11-05 09:46:17
【问题描述】:

我在 windows vista/IIS 7 中使用 iis 节点尝试了一些 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

以前有人试过吗?

【问题讨论】:

  • socket.io 哪里失败了?您是否包括被 socket.io 服务器切断的脚本? IIS 可能没有正确处理 websocket 连接。
  • 我认为它不知道在哪里可以找到socket.io。在一个普通的node.js中,如果我把它放在node_modules下就足够了。但在 IIS 中,我不知道如何让 iisnode 了解 node_modules 的位置。

标签: iis node.js socket.io iisnode


【解决方案1】:

回读a few months ago,IIS 下的 Socket.IO 不支持 WebSocket 支持,但是长轮询是。

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

正如 Tomasz 所写:

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

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

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

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

【讨论】:

    【解决方案2】:

    这可能与您的问题有关,也可能无关。我对 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 的酷炫因素,但它可能会帮助您解决问题。

    【讨论】:

    • 谢谢。我在使脚本理解您的应用程序中的额外节点模块时也遇到问题?例如,它不理解同一文件夹中的任何其他 js(调用 require('./myadditionalscript.js') 或通过将 node_modules 放在脚本所在的同一文件夹下来调用它 require('myadditionalscript')。
    【解决方案3】:

    如果您的 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 了解详细信息。

    【讨论】:

      猜你喜欢
      • 2017-07-23
      • 2012-08-18
      • 1970-01-01
      • 1970-01-01
      • 2012-05-24
      • 2022-01-06
      • 2020-02-25
      • 1970-01-01
      • 2015-06-25
      相关资源
      最近更新 更多