1

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を使用しようとしています

以前にこれを試した人はいますか?

4

3 に答える 3

2

数か月前に読み返してみると、WebSocket のサポートは IIS の Socket.IO ではサポートされていませんが、長いポーリングはサポートされています。

これは数か月前のことで、現在同じ問題に直面しており、解決しようとしています。

トマシュが書いているように:

iisnode は websocket トランスポートをサポートしていませんが、HTTP ロング ポーリングなどの他の HTTP ベースのトランスポートでは socket.io を使用できることに注意してください。

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

2012年 2 月 23 日現在、この機能はまだサポートされていません。

IIS を通過する必要がありますか? IISNode を排除して、純粋な Socket.IO/Node オプションを使用するオプションはありますか? フォールバック機能を備えた完全な WebSocket サポートが必要な場合、他の提案がない限り、これが唯一のオプションのように見えますか?

于 2012-03-05T16:40:17.427 に答える
0

socket.io Web アプリケーションが IIS 仮想ディレクトリでホストされている場合、自己ホストの場合と比較して、socket.io 構成を変更する必要があります。詳細については、 http://tomasz.janczuk.org/2013/01/hosting-socketio-websocket-apps-in-iis.htmlを参照してください。

また、バージョン0.2.xの時点で、iisnode は IIS 8 を使用する Windows 8 および Windows Server 2012 で WebSocket をサポートしています。詳細については、 nodejs-apps.htmlを参照してください。

于 2013-02-06T21:43:48.820 に答える
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 プロトコルをよく読む必要があります。

私は、Websocket が長時間実行される要求とどのように異なるかについてあまりよく知らないことを最初に認めます。ただし、私が理解しているように、socket.io は websocket をサポートしていない古いブラウザーでも動作します。

トランスポートを xhr-polling または jsonp-polling のみに設定することをお勧めします。これは、node.js を使用することのクールな要素を少し無効にしますが、問題の解決に役立つ可能性があります。

于 2011-11-05T21:50:31.487 に答える