2017-12-18 20 views
1

일부 실시간 기능이 포함 된 앱을 만들고 있습니다. 프런트 엔드에 Node.js, SocketIOExpress + React을 사용합니다. 백엔드에서 httpws 요청을 모두 처리합니다. 프록시 옵션을 사용하여 webpack-dev-server을 사용하여 클라이언트의 요청을 로컬 서버로 리디렉션합니다.소켓 -io 클라이언트가 연결 요청을 계속 전송합니다.

며칠 전에 웹팩 구성이나 백엔드 코드를 건드리지는 않았지만 클라이언트 측에서 io({ path: '/socket' })을 한 번 호출하면 백엔드에 많은 연결 요청이 전송됩니다.

이유는 HMR, 구성 요소의 다시 렌더링 또는 클라이언트 측의 일부 루프가 아닙니다. 나는 클라이언트 측이 io({ path: '/socket' }) 한 번만 호출한다고 확신한다. 문제가 남아있는 오래된 일부 브랜치를 변경하더라도 모두 node_modules을 다시 설치 한 후에도 문제가 남아 있습니다. 그래서 이것은 네트워크/하드웨어 관련 일 수도 있습니다. 그것은 정말 빠른 연결 유지 일반적으로이 로그의 일부분 만

enter image description here

이다 : 나는 윈도우 10, Node.js를 내 백엔드 콘솔에서 생산 디버그 모드에서 6

실시 로그를 사용하여 멈추지 않습니다.

여기에 무슨 일이 벌어지고 있는지 궁금하십니까?

+1

이유 중 하나입니다. socket.io가 webSocket으로의 전환을 완료하기 전에 서버가 끊어집니다. 코드를 표시하지 않으므로 어디에서 클라이언트 측 socket.io 코드를 가져 오는지 또는 서버에서 실행중인 버전과 정확히 동일한 버전인지 여부는 알 수 없습니다. – jfriend00

+0

고마워요.하지만 같은 버전 있어요. – dominik791

답변

1

websocket이 이미 사용 가능할 경우에도 socket.io은 긴 폴링을 계속 사용하여 문제가 발생했습니다. 이 같은 연결 옵션에 내가 transports: ['websocket'] 전달이 문제를 해결하려면, 당신은 socket.io의 클라이언트와 서버 버전이 일치하지 않는 경우가 폴링 밖으로받지 않습니다 이유

import io from 'socket.io-client'; 
io({ path: '/socket', transports: ['websocket'] });