inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

탄탄한 백엔드 NestJS, 기초부터 심화까지

유니캐스팅 (Unicasting) : emit & on

소켓 연결관련 질문입니다.

1659

IJILKJ

작성한 질문수 68

1

강의에서 socket.id는 계속 유지되다가 연결이 끊기거나 새로고침되면 바뀐다고 나오는데요
즉, 새로고침하면 소켓연결이 끊긴다는 뜻인데 이걸 막을 방법이 있나요?
예를 들어서 제가 웹 상에서 멀티플레이가 가능한 카드게임을 구현한다고 하면 게임 플레이 도중 사용자가 실수로 새로고침을 누르면 끊겨버릴텐데 이런 상황에서는 어떤식으로 처리를 하나요?
또 질문이 하나 있는데 강의와는 조금 벗어난 질문이긴한데..
소켓연결에 더해서 redis까지 이용해서 만들어보려고 하는데
구글에 nestjs redis 이렇게 검색하면 나오는 공식문서가 Microservice 어쩌고 하면서 redis랑 같이 나오더라구요.
제가 구현하고 싶은 기능은 웹상에서 방을 만들고,
사용자들이 해당 방에 들어가면 사용자들의 정보를 redis에 담고
redis pub/sub과 소켓을 이용하여 같은 방안에 사용자들끼리 통신하는 그런걸 만들어보고 싶은데
이 경우에 공식문서에 나와있는 Microservice.. 를 쓰면 되는게 맞는건지 잘 모르겠어서 질문드립니다.

mongodb nodejs express NestJS ssr

답변 1

0

윤상석

새로고침을 하는 순간 세션이 닫히기 때문에 소켓 연결은 끊깁니다.

막을 방법은 클라이언트 단에서 새로고침 시에 경고(alert)창을 띄어주거나 방지하는 방법이 있습니다.

구글에 "브라우저 새로고침 방지 javascript 코드"를 검색하시면 f5 버튼 막기 등 다양한 경로의 새로고침을 클라이언트 단에서 막을 수 있는 코드가 있습니다. 참고하시면 좋을 것 같습니다. :)

이 코드를 <script>code</script>로 삽입해 주시면 됩니다.

redis 관련 프로젝트는 socket.io-redis-adapter 패키지 추천드립니다.

 https://github.com/socketio/socket.io-redis-adapter

관련해서 데모를 찾아 보았는데요. https://github.com/phatvo21/nest-chat-realtime

목적에 맞는 코드와 유사할 것 같습니다!

0

IJILKJ

우선 이렇게 예시 코드까지 갖고와주셔서.. 정말 감사합니다.

그런데 제가 생각한건 그냥 mysql이나 mongodb를 nestjs에 연결하듯 

평범한 redis db를 추가로 연결한다음에 연결된 redis와 websocket으로 뭔가를 해보려했던 것인데 socket.io-redis-adapter는 뭔가 더 고차원적인거같던데.. 이게 어떤 기능들을 하는건지 알 수 있을가요?

제가 다시 구글링을 해보니까 nestjs-redis가 있고 https://www.npmjs.com/package/nestjs-redis

redis-cache가 있던데 둘중에 어떤걸 써야되는지를 모르겠네요;

0

윤상석

음 그렇다면 redis-cache도 가능하긴 하지만 아무래도 더 저수준 인터페이스라 바로 간단하게 사용하실거면 nestjs-redis를 사용하는 것이 좋을 것 같습니다. 제가 nestjs-redis를 깊게 사용해보진 않아서 pub/sub 인터페이스가 좋은지는 잘 모르겠네요 ㅠㅠ 처음부터 자유롭게 수동으로 개발하실 생각이시라면 redis-cache도 괜찮은 것 같습니다!

프로젝트 환경 세팅할 때 최신 노드 버젼을 사용하시는 분들은 참고하셔도 좋을 것 같아요~

2

80

1

DTO에 대한 질문

1

87

2

백엔드 MVC에서 View의 역할은 무엇인가요?

1

93

2

추가 업데이트 관련 건

0

90

2

nest js 버전문제

0

79

2

mongdb 스키마 공식 문서와 형태가 다른 이유 궁금합니다.

0

103

1

라인 끝에 에러 표시(eslint) 때문에 구글 찾아 보니.

0

74

1

전체 고양이 조회 라우터 중 error.message 오류

0

67

1

캡슐화 추가 설명 중 단일책임원칙 관련 질문

0

104

0

42강 고양이끼리 소통 댓글 구현 중 Schema hasn't been registered for model 'comments' 에러 해결

0

81

1

채팅 이슈

0

133

1

모듈이 더 이상 지원하지 않는답니다

0

206

1

오류가 있습니다

0

106

1

import 에서 오류가 납니다

0

127

1

이런 오류가 나옵니다

0

100

1

에러가 발생합니다

0

109

1

프론트 에러 뜨는데 수정 안해주시나요

0

156

1

emit() broadcast.emit() 질문있습니다

0

101

1

서버연결이 안됩니다.

1

403

1

[PM2][ERROR] Command not found

0

519

1

S3에 업로드까지는 성공했는데 사진이 나오지 않습니다.

0

248

1

error_code : Property 'user' does not exist on type 'Request<ParamsDictionary, any, any, ParsedQs, Record<string, any>>'.ts(2339)

0

601

1

jwt를 따로 연습하고 있는데 env를 못읽는 것 같습니다.

0

322

2

Ec2로 안하시는 이유가 있을까요?

0

343

1