2014-03-13 4 views
0

다음 두 예제를 수행했습니다. http://nodejs.org/Node.js 예제가 작동하지 않습니다.

첫 번째 예제가 작동했습니다. 그런 다음 터미널에 아래 오류를 표시하고 url (localhost : 8000)에 입력했을 때 프로세스를 종료 한 두 번째 시도를 시도했습니다. 그것은 잘 컴파일됩니다.

$ node node.js 

events.js:72 
     throw er; // Unhandled 'error' event 
      ^
Error: read ECONNRESET 
    at errnoException (net.js:901:11) 
    at TCP.onread (net.js:556:19) 

일부 검색 결과에 따르면 포트가 이미 사용 중이지만 두 번째 예의 포트를 변경했지만 사용하지 않은 것으로 나타났습니다.

내가 localhost를 방문했을 때 : 8000 (코드에 동일한 포트), 웹 페이지를 표시이 :

Echo server 
GET/HTTP/1.1 
Host: localhost:8000 
Connection: keep-alive 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.149 Safari/537.36 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-US,en;q=0.8 

나는 정확히 Node.js를 웹 사이트에서 코드를 복사하고, 또한 포트 번호를 변경했습니다. 무엇이 잘못되었는지 확실하지 않습니다.

Edit

: 의견

  • 없음 방화벽에 응답.

  • OS : 리눅스 민트 15

  • 노드 v0.10.25

프로세스는 : ​​

$ ps 
    PID TTY   TIME CMD 
29150 pts/1 00:00:00 bash 
29226 pts/1 00:00:00 ps 
+0

방화벽이 활성화되어 있습니까? – Gntem

+0

동일한 포트를 사용 했으므로 다른 예제에서 프로세스를 종료 했습니까? 예를 들어, IntelliJ에서 여러 개의 JS 파일을 마우스 오른쪽 버튼으로 클릭하면 실제로 이전 실행에서 실행 프로세스가 죽지 않습니다. –

+2

두 번째 예제는 HTTP 서버가 아닌 TCP 서버입니다. 그것은 귀하의 브라우저에서 작동하지 않습니다. 텔넷을 통해 연결해야합니다. 예를 들어 Linux 터미널 "telnet localhost 1337" –

답변

3

으로 헥터의 의견에서 지적 : 두 번째 예는 TCP 서버입니다. 포트가 이미 시작되었습니다 (이미 사용 된 포트가 없습니다). 이에 대해 HTTP 요청이 다음은

  • 일어날 수 있도록하면 브라우저가
  • 는 Node.js를 TCP 소켓에 HTTP 프로토콜 데이터를 전송은 "에코 서버를 쓴다"다시
  • 는 Node.js를 HTTP 프로토콜 잡담을 기록 그것은 브라우저에서받은 것입니다 (그 이유는 "웹 페이지"에서 "재미있는"것을 보게됩니다)
  • 브라우저가 소켓을 닫습니다 (아마도 시간이 초과되기를 기다리는 중이므로 꽤 오래 걸릴 수 있습니다)
  • 이 시점에서 node.js는 쓰기 가능한 소켓 스트림에 대해 열린 파이프를 가지고 있으므로 읽기 가능한 소켓 스트림에 오류 이벤트를 (둘 다 여기 var socket 있습니다)이 오류는 처리되지
  • 종료, 따라서 당신은

이를 "해결"에 대한 예외를 참조하거나 브라우저를 사용하지 않는 즉, 클라이언트 측에서 소켓을 닫지 마십시오 (예를 들어 텔넷으로 스크립트 대화를 나눌 수) 바람직 호출하기 전에 (이

socket.on('error', function() { 
    console.log("Error is properly handled"); 
}); 

같은 프로그램에 에러 이벤트의 처리를 추가 ~ socket.write).

+0

에서 다음을 실행하십시오. 설명을 주셔서 감사합니다. 웹 프로그래밍에 익숙하지 않습니다. HTTP 서버와 TCP 서버를 함께 사용해야합니까? 아니면 하나 이상을 선택합니까? 차이점이 뭐야? – onepiece

+0

귀하와 귀하의 다른 브라우저는 HTTP를 사용하므로 어떤 웹 프로그래밍에도 사용해야합니다. TCP는 하위 수준이며 응용 프로그램 수준에서는 사용하지 않습니다. 그러나 이것은 node.js의 HTTP 라이브러리의 내부 구현에 사용되거나 POP3 또는 IMAP과 같은 다른 protocals를 구현하는 데 사용됩니다. http://en.wikipedia.org/wiki/Http#Technical_overview – Miichi

관련 문제