Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Error] socket.js 기능별 분리 중 연결 안됨 #27

Closed
tastekim opened this issue Nov 11, 2022 · 4 comments
Closed

[Error] socket.js 기능별 분리 중 연결 안됨 #27

tastekim opened this issue Nov 11, 2022 · 4 comments
Assignees
Labels
bug Something isn't working enhancement New feature or request

Comments

@tastekim
Copy link
Owner

✂️기능 별 socket.js 만들어서 socket 로직 분리 후 서버 테스트 시 연결이 안됨.

기존에 socket.js 의 내용을 기능별로 쪼개서 각 파일별로 해당하는 기능만을 작성할 수 있도록 파일을 나눠봤습니다.

// ../src/socket.js
const socketIo = require('socket.io');
const http = require('./app');

const io = socketIo(http);

io.on('connection', (socket) => {
    console.log('socket.js connected', socket.id)

    socket.on('test1', (msg) => {
        console.log(`../src/socket.js receive -> ${msg} to ${socket.id}`)
    })

})

module.exports = io;
// ../src/game/game-socket.js
const game = require('../socket');
const GameProvider = require('./game-provider');

game.on('connection', (socket) => {
    console.log('game-socket connected', socket.id)
    const gameProvider = new GameProvider();

    // 게임 플레이 종료 및 스파이 투표 시작.
    socket.on('test2', (msg) => {
        console.log(`../src/game/game-socket.js receive -> ${msg} to ${socket.id}`)
    })
})
// ../src/rooms/room-socket.js
const room = require('../socket')

room.on('connection', (socket) => {
    console.log('room-socket connected', socket.id)

    socket.on('test3', (msg) => {
        console.log(`../src/rooms/room-socket.js receive -> ${msg} to ${socket.id}`)
    })

})

🔍에러 내용

스크린샷 2022-11-12 오전 2 30 33

에러는 아니지만 제가 생각했던 것은 터미널에

connect on http://127.0.0.1
socket.js connected pDAuZqc821uR_EJMAAAB
room-socket connected pDAuZqc821uR_EJMAAAB
game-socket connected pDAuZqc821uR_EJMAAAB

이런 식으로 하나의 socket.id를 여러 모듈화한 소켓 파일에서 바라보길 바랬는데 실제 터미널 로그를 보면
socket.js 에서만 console.log가 실행되고 나머지 파일은 거치질 않습니다.

🔍조치 사항

프로젝트 최상단에 server.js에서 처음 socket.js를 require 해주듯이, game-socket.js와 room-socket.js를 require 해주면
하나의 socket이 여러 파일에서 connection되어집니다. 그럼 eventMessage만 기능별로 잘 작성하면 socket.js에 모든 로직을 넣지 않고
기능별로 socket 로직 또한 나눌 수 있게 됩니다.

스크린샷 2022-11-12 오전 2 37 47

/ ../server.js
const http = require('./src/app');
require('./src/socket');
require('./src/game/game-socket') // <- 추가
require('./src/rooms/room-socket') // <- 추가
const connect = require('./src/schemas');
connect();

http.listen(3000, () => {
    console.log('connect on http://127.0.0.1');
});

환경 설정

OS: Mac Ventura 13.0.1
Node:  v16.16.0 (@tastekim )
npm : v8.19.2 (@tastekim )
@tastekim tastekim added bug Something isn't working enhancement New feature or request labels Nov 11, 2022
@tastekim tastekim added this to the Troubleshooting milestone Nov 11, 2022
@tastekim tastekim assigned kimhsno1, tastekim, ghost and yunjin5450 and unassigned kimhsno1, ghost and yunjin5450 Nov 11, 2022
@kimhsno1
Copy link
Collaborator

게임과 방이 같은 소켓에 연결되있는걸 눈으로 확인할 수 있는게 좀 큰 수확이네욥

@tastekim
Copy link
Owner Author

@kimhsno1
eventMessage를 test1, test2, test3 으로 통신해보면 socket.id는 그대로고 각 eventMessage도 잘 동작합니다!
아마 chat, game, room, user 등 socket 관련한 로직들을 기능별로 나눌 수 도 있을것같아요!
chat이나 user 이 외에 나눌 기능들 확인해보고 코드가 복잡해지겠다 싶으면 나누고 아니면 굳이 안나눠도 될것같긴합니다!
일단 room이랑 game이 코드가 길어질 것 같아서 이 둘은 일단 나누고 가는건 어떤가요?

@kimhsno1
Copy link
Collaborator

@tastekim
룸이랑 게임은 나누는게 저희가 수정하거나 관리하기에도 좋을 것 같습니다 .
룸과 게임을 어느정도 작성하고 나면 chat의 길이가 어느정도일지 가늠해보고 chat안에 텍스트채팅과 RTC를 이용한 채팅을
같이 넣을지 분리할지 고민해보면 좋을 것 같아요

@tastekim
Copy link
Owner Author

@kimhsno1
옼케~~~~~~~~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working enhancement New feature or request
Projects
Development

No branches or pull requests

3 participants