오늘해야할일
인프런 강의 20개 듣기 [9개]
알고리즘 문제풀이
제로초 유튜브 하나보기
인프런 강의
강의명 : Socket.io 사용해보기
폴링을 먼저시도하고 웹소켓을 시도한다 ⇒ 구형브라우저는 웹소켓을 지원하지않는다
그렇기때문에 지원하지않는 브라우저를 위해서 폴링은먼저 시도하고 그 다음에 웹소켓으로 업그레이드한다.
Socket.IO 패키지를 불러와 익스프레스서버와 연결. 두 번째 인수는 클라이언트와 연결할 수 있는 경로(/socket.io)
connection 이벤트는 서버와 연결되었을 때 호출, 콜백으로 소켓 객체(socket)제공
socket.request로 요청 객체에 접근 가능, socket.id로 소켓 고유 아이디 확인 가능
disconnect 이벤트는 연결 종료 시 호출, error는 에러 발생 시 호출
reply는 사용자가 직접 만들 이벤트로 클라이언트에서 reply 이벤트 발생 시 서버에 전달된다.
socket.emit으로 메시지 전달. 첫 번쨰 인수는 이벤트 명, 두번째 인수가 메시지
※ Socket.IO는 먼저 폴링 방식으로 연결 후(웹 소켓을 지원하지 않는 브라우저를 위해), 웹 소켓을 사용할 수 있다면 웹 소켓으로 업그레이드
※ 웹 소켓만 사용하고 싶다면 transports 옵션을 다음과 같이 주면됨
const socket = io.connect('http://localhost:8005', {
path : '/socket.io',
transports: ['websocket'], //이거를 추가하면 웹소켓만 사용한다는 뜻
//해당 코드를 제외하면 폴링 후에 웹소켓으로 연결됨
}),
nodebird 알게된 사실들
[app.js에 추가해줘야하는 부분]
sequelize.sync({force:false}) //sync는 promise이기 때문에,
//then, catch를 사용하여 성공인지 오류인지 확인할수있도록한다.
.then(()=> {
console.log('데이터베이스 연결 성공')
})
.catch((error)=> {
console.error(err)
})
[app.js에 추가해줘야하는 미들웨어]
//404 처리 미들웨어
app.use((req,res,next)=> {
const error = new Error(`${req.method} ${req.url} 라우터가 없습니다.`)
error.status = 404
next(error)
})
//500 에러 미들웨어
//단, 에러미들웨어를 사용하기 위해서는 render
//error.html을 만들어야한다.
app.use((err,req,res,next)=> {
res.locals.message = err.message;
res.locals.error = process.env.NODE_ENV !== 'production' ? err : {};
res.status(err.ststus || 500).render('error')
})