2017-02-14 3 views
0

나는 라우팅을 위해 반응 라우터를 사용하는 React/Redux 앱을 보유하고 있습니다.반응 라우터에서 websocket 연결 유지

이 앱의 일부로 websocket 연결을 설정했습니다. 내가 직면 한 문제는 URL로 바로 이동할 때 연결이 끊어지는 것입니다. 예를 들어

은 : www.app.com/

  • 웹 소켓 연결에서 홈 페이지에

    1. 사용자 땅이 설정됩니다.
    2. React Router browserHistory를 통한 www.app.com/link 사용자 네비게이션은이 페이지에 아무런 연결을 설정하지 않습니다.
    3. 연결이 유지됩니다.

    예상대로 작동합니다. 그러나 : www.app.com/

  • 웹 소켓 연결에서 홈 페이지에

    1. 사용자 땅이 설정됩니다.
    2. 사용자는 주소 표시 줄에 입력 (또는 이전의 예를 통해 탐색 한 후 페이지를 새로 고쳐 /link로 직접 이동합니다.
    3. 연결이 떨어졌다.

    이 예상되는 동작인가? 그래서이 어떤 경우 Redux/React 라우터 패턴을 피할 때마다 수동으로 연결을 재설정해야합니까?

  • +0

    클라이언트 측 라우팅과 클라이언트 측 라우팅에 대해 알고 계십니까? – Jayce444

    +0

    지금까지는 서버가 필요없는 앱을 계획하고있었습니다. 그래서 모든 것이 클라이언트 측이고, Route53을 사용하는 S3에서'app.com/'이외의 요청을 받도록 –

    +0

    websocket 부분에 대해서는 확신 할 수 없지만 수동으로 링크를 탐색 할 경우 React 라우터 부분 만 있으면됩니다. 해당 파일에 대한 서버를 쿼리하고 클라이언트 쪽만 경로로 존재하는 경우 404가 표시되고 실패합니다. 이 문제를 해결하려면 백엔드에서 모든 경로를 찾아야합니다 (예 : 'app.get ('* ', (req, res) => {res.sendFile ('index.html ')}) ; '당신이 수동으로 URL을 입력하거나 페이지를 새로 고침하는 경우 트리거됩니다. 귀하의 경우 서버 측과 websocket의 경우 특정 연결 경로와 관계없이 연결이 설정되도록 설정해야합니다 (Tiago가 말한 것처럼) – Jayce444

    답변

    2

    예, 예상되는 동작입니다. 페이지를 새로 고치거나 URL을 직접 입력하여 탐색하면 브라우저가 서버로 다시 이동하여 자바 스크립트 앱을 포함한 파일을로드하십시오. 캐시하지만 결과는 동일합니다). 이 때문에 websocket 연결을 포함하여 메모리에있는 자바 스크립트 코드가 손실되고 모든 스크립트가 다시 평가됩니다.

    이 문제를 해결할 방법이 없습니다. 항상 websocket 연결을 열려면 사용자가 어떤 페이지에 있는지에 관계없이 앱 진입 점 스크립트에서 연결을 열면됩니다.