μΉ΄ν€μ€ν‘μμλ μ±ν
μ μ£Όκ³ λ°μλ socket
μ΄λ²€νΈλ₯Ό νμ©νκ³ μλ€. μλλ μλμ²λΌ λμ°ν ννλ‘ socket
μ΄λ²€νΈλ₯Ό μ μν νμΌμμ λ°λ‘ κ΄λ¦¬νκ³ μμλ€.
export const socket = socketOpen(configs.SOCKET_URL, {
transports: ["webso
export const connect = () => {
socket.on(Sockets.EventMap.connect, (msg: string) => {});
};
export const disconnect = () => {
socket.on(Sockets.EventMap.disconnect, (msg: string) => {});
};
export const chatFromServer = (dispatch: Dispatch<any>) => {
socket.on(Sockets.EventMap.chatFromServer, (newChat: ApiChat) => {});
};
export const afterLogin: AfterLogin = ({ uuid }) => {};
export const chatFromClient: ChatFromClient = ({
roomUuid,
content,
createdAt,
userUuid,
}) => {};
export const joinRooms: JoinRooms = ({ roomUuids }) => {};
μκ°μ΄ κ°μλ‘ μμΌκ΄λ ¨ λ‘μ§μ 볡μ‘ν΄μ§κ³ λλ‘λ redux
μ action
μ dispatch
νκ±°λ view
λ¨μμ μ΄λ²€νΈ μ€λ³΅λ±λ‘μ λ§κΈ° μν΄ socket.removeEventListener
λ₯Ό νμ©νκΈ°λ νμλ€.
μμΌ μ΄λ²€νΈλ μλ²μ νλ‘ νΈ μ΄λμλ ν¬ν¨λμ§ μλ μΈλΆμ΄λ²€νΈμ΄λ€.
μμΌ μ΄λ²€νΈλ‘ νλ‘ νΈμ μλ²μ¬μ΄μ μ΄λ€ λ°μ΄ν°λ€μ μ£Όκ³ λ°λ λ‘μ§μ socket/socket.ts
μ μ μλμ΄ μλ ν¨μλ‘ λλΉ΅ μ€μ΄μλλ° κ°μλ‘ μ΄λμλ μνμ§ μκ³ κ²λλ λλμ΄μλ€.
μ΄λ°μμΌλ‘ socket
μ λ€λ£¨λ€λ³΄λ©΄ λ‘μ§μ νλ¦μ΄ κ΅μ₯ν 볡μ‘ν΄μ§λλ° μ¬κΈ°μ κΈ° μλ€λλ©΄μ μ΄λμ μλ¬λ₯Ό ν°νΈλ¦΄μ§λ λͺ¨λ₯΄κ² κ³ μ½λλ μλ€κ°λ€ νλ©΄μ μ μ§λ³΄μνκΈ° κ΅μ₯ν νλ€μλ€.
- view μμ socket event ꡬλ
- socket μ΄λ²€νΈ λ°μ
- view μμ dispatch
- saga μμ λΉλκΈ°μ²λ¦¬ ν dispatch
- reducer μμ state μ λ°μ΄νΈ
λ€νν redux-saga μμ μ 곡νλ channel μ΄λ²€νΈλ₯Ό μ΄μ©νλ©΄ νμ μ μΆλ ₯, μμΌ μ΄λ²€νΈμ κ°μ μΈλΆ μ΄λ²€νΈμ κ²°ν©ν μ μλ λ°©λ²μ μ¬μ©ν μ μκ² λλ€.
κ·Έλμ μλμ κ°μ μμλ‘ socket event λ₯Ό νΈλ€λ§ κ°λ₯ν΄μ§λλ€.
channel
μμ μ΄λ²€νΈ μμsaga
μμ λΉλκΈ° λ‘μ§ μ²λ¦¬action dispatch
νΉμ
view
μμaction dispatch
channel
μ ν΅ν΄ μ΄λ²€νΈpush
μμ§ μ΄ν΄λ₯Ό μ λλ‘ λͺ»ν λΆλΆμ΄ μμ΄μ μ½λκ° μλΉν λλ½μ§λ§ λ‘μ§μ΄ λ¨μν λκ³ κ΄λ ¨μλ side effect
λΌλ¦¬ λ¬Άμ¬μ saga
μμμ μ²λ¦¬λλ μλ¬μ²λ¦¬λ μ½λ κ΄λ¦¬κ° μ¬μμ§ κ² κ°λ€.