부제: 네? 저 신입인데요...?
이걸 모듈화(라이브러리화) 시켜주세요
절 납득시키는 조건에서요.
=> 내 생각에는 가장 쉬운 프래임워크다.
=> 예제가 있으며 백엔드를 안해도 된다!
=> 채팅방을 바꿀 때마다 연결 설정!
// routes.js
const changeChatRoom = (to, from, next) => {
// ...
window.force_disconnect()
// ...
window.connect(true)
// ...
}
next()
}
// main.js
window.connect = function (not_disp_info) {
try {
if (use_browser_ws) {
ws = new WebSocket('ws://' + serverHost + ':' + wsPort + '/chat')
}
ws.onopen = function () {
if (window.chattingApp) {
window.chattingApp.$store.dispatch('clearMessages')
}
if (!not_disp_info) {
printNotifyMessage('서버와 접속되었습니다.')
}
loginUser()
}
ws.onclose = function () {
printErrorMessage('접속이 종료되었습니다.')
}
} catch (exception) {
printErrorMessage('connect Error ' + exception)
}
}
window.force_disconnect = function () {
window.is_login_success = false
try {
window.is_login = false
ws.close()
} catch (e) {
// console.error('ws force_disconnect error', e)
}
}
기존 채팅 클라이언트 에서는 링크 이동을 통해
연결을 끊고 다시 시작 하는 방식을 취했지만
SPA로 설계된 Vue로 만든 채팅 클라이언트는
routing 변경이 연속적으로 발생하면
간혹 연결이 끊어진채 연결이 안되거나
연결이 두번 발생하는 사고가 발생합니다.
물론 빈도수가 매우 적으며 재현도 쉽지 않습니다만.. (netty 짱짱맨)
주의하시는게 좋을 것 같습니다.
기존 채팅 클라이언트 에서는 단순한
HTML를 동적으로 쌓아가는 방식을 취했기 때문에
HTML이 생성되는 족족 Static data가 되어
랜더에 영향을 주지 않았지만
제가 만든 SPA로 설계된 Vue로 만든 채팅 클라이언트는
매시지가 Vuex에 쌓이며 메시지 array가 변경되면
Re-Rendering을 진행하기 때문에
Array의 길이(채팅 노드의 수)가 많아지면
과부하가 걸려 랜더링이 늦어지거나
브라우져를 다운시킬 수 있으니 주의하세요.