2011-11-05 3 views
0

iis 노드를 사용하는 Windows Vista/IIS 7에서 node.js로 무언가를 시도했습니다. 내 생각은 asp .net mvc 응용 프로그램에서 서버 스크립트를 사용하여 다른 소켓 서버에 연결하고 요청을 지속적으로 제공하는 것입니다.IIS 노드가있는 nodejs socket.io

IIS 7의 경우 iisnode 버전을 https://github.com/tjanczuk/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

모든 신체를 사용하려고 말했듯이?

+0

socket.io는 어디에서 실패합니까? socket.io 서버에 의해 절단 된 스크립트를 포함하고 있습니까? IIS가 websocket 연결을 올바르게 처리하지 못할 수도 있습니다. – btleffler

+0

나는 그것이 socket.io를 어디서 발견해야하는지 모른다. 일반적인 node.js에서 node_modules 아래에 넣으면 충분합니다. 그러나 IIS에서는 node_modules의 위치를 ​​이해하기 위해 iisnode를 어떻게 만들지 모르겠다. – 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 프로토콜을 읽어야 할 것입니다.

웹 소켓이 장기 실행 요청과 어떻게 다른지 잘 모르겠다는 것을 처음으로 인정할 것입니다. 그러나 socket.io는 웹 소켓을 지원하지 않는 구형 브라우저에서도 작동합니다.

전송을 xhr-polling 또는 jsonp-polling로 설정하는 것이 좋습니다. 그것은 node.js를 사용하는 멋진 요소를 다소 상쇄하지만 문제 해결에 도움이 될 수 있습니다.

+0

감사합니다. 또한 스크립트에서 앱의 추가 노드 모듈을 이해하는 데 문제가 있습니까? 예를 들어 require ('./ myadditionalscript.js') 또는 require ('myadditionalscript') 호출과 함께 동일한 폴더에있는 추가 j를 인식하지 못합니다. 스크립트가있는 폴더와 동일한 폴더 아래에 node_modules을 놓습니다. – Muthu

1

a few months ago을 다시 읽으면 WebSocket 지원은 IIS에서 Socket.IO와 함께 지원되지 않지만 긴 폴링은 지원됩니다.

이것은 몇 달 전 이었지만 현재 동일한 문제에 부딪 치고 해결하려고합니다. 토마스으로

글 :

웹 소켓 전송을 지원하지 않는 iisnode주의,하지만 사용 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 지원이 필요한 경우 다른 제안이없는 한 유일한 옵션처럼 보입니다.

0

socket.io 웹 응용 프로그램이 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에서 웹 소켓을 지원합니다. 자세한 내용은 http://tomasz.janczuk.org/2012/11/how-to-use-websockets-with-nodejs-apps.html을 확인하십시오.