티스토리 뷰
소켓은 이벤트를 기반으로 작동한다.
서버측 소켓객체의 예약 이벤트
- connect
- message
- disconnect
- reconnect
- ping
- join
- leave
클라이언트측 소켓객체의 예약 이벤트
- connect
- connect_error
- connect_timeout
- reconnect, 등
앞에서 connect와 disconnect는 사용해봤다. 이번에는 message 이벤트를 사용해서 클라이언트에게 메시지를 보내본다.
앞서 작성한 app.js 파일에서 connect와 disconnect 사이에 다음과 같은 코드를 넣어준다.
app.js
io.on('connection', (socket) => {
console.log('A user connected');
////////////////////////////////////////////////////////////////////////////////
setTimeout(function () {
socket.send('바쁜 벌꿀은 슬퍼할 시간도 없다.');
}, 3000);
/////////////////////////////////////////////////////////////////////////////////
socket.on('disconnect', () => {
console.log('A user disconnected');
})
})
위의 send를 통해서 클라이언트에 있는 message 이벤트에 도착할 수 있다.
The send function on socket object associates the 'message' event.
( 자습서에 보면 이렇게 나와있는데 뭐 socket 객체의 send 함수가 message와 관련이 있다고 한다. )
서버쪽에서 메시지를 보낼 수 있게 되었지만 아직 클라이언트 쪽에서 받을 준비가 되지않았다.
클라이언트 쪽에도 코드를 추가해준다.
views > index.js
const socket = io();
socket.on('message', function(data){document.write(data)});
여기까지 마치고 브라우저에 들어가서 localhost 3000에 접속하고 3초를 기다리면 위에 우리가 정해줬던 문장이 나온다.
message는 socket.io 가 제공하는 내장형 이벤트다. 실제 소켓을 사용할 때는 이벤트를 구분할 필요가 있기 때문에 이건, 별로? 쓸 일이 없다.. 아마도
사용자 정의 이벤트
socket.io 는 사용자 지정 이벤트를 생성할 수 있다.
socket.emit 을 사용해서 사용자 지정 이벤트를 생성하고 실행할 수 있다.
socket.on 을 사용해서 이러한 이벤트들을 처리할 수 있다.
사용자 정의 이벤트를 사용하기위해, 아까 썼던 app.js 의 메시지 부분을 살짝 고쳐준다.
socket.emit(evnet, object)
event: 사용자 정의 이벤트명
test 라는 이벤트를 만들어봤다.
app.js
io.on('connection', (socket) => {
console.log('A user connected');
////////////////////////////////////////////////////////////////////////////////
setTimeout(function () {
socket.emit('test', {testText:바쁜 벌꿀은 슬퍼할 시간도 없다.});
}, 3000);
/////////////////////////////////////////////////////////////////////////////////
socket.on('disconnect', () => {
console.log('A user disconnected');
})
})
클라이언트측에서 이 test 라는 사용자 정의 이벤트를 처리하려면 test를 받을 수 있는 수신기가 필요하다.
그게 바로 socket.on()
socket.on(event, callback)
views>index.html
const socket = io();
socket.on('test', (data)=>{document.write(data.testText)});
위에서 서버에서 클라이언트로 이벤트를 emit하는 것을 알아봤다.
마찬가지로 클라이언트측에서도 이벤트를 emit 할 수도 있다.
veiws>index.html
<script>
const socket = io();
socket.emit('djKim',{msg:'북은 핵을 개발한 적도 없고, 개발할 능력도 없다.'});
</script>
브라우저가 접속하면 소켓이 연결되고, djKim 이라는 이벤트를 emit 한다.
app.js
io.on('connection', (socket) => {
// console.log('A user connected');
// setTimeout(function () {
// socket.emit('test', { testText: '바쁜 벌꿀은 슬퍼할 시간도 없다.' });
// }, 4000);
socket.on('djKim', (data) => {
console.log(data.msg + '북이 핵을 개발하면 내가 책임지겠다.');
})
// socket.on('disconnect', () => {
// console.log('A user disconnected');
// })
})
서버에서 djKim 이라는 이벤트를 받으면 아래와 같은 메시지가 콘솔창에 출력된다.
클라이언트의 메시지를 서버가 잘 받았다^^
'Node.js' 카테고리의 다른 글
socket.io 팁 (0) | 2021.07.04 |
---|---|
socket.io 브로드캐스팅 (0) | 2021.07.04 |
socket.io 시작 (0) | 2021.07.04 |
unload 이벤트, navigator.sendBeacon() (0) | 2021.06.22 |
게시판 테이블. (0) | 2021.06.09 |
- Total
- Today
- Yesterday
- BFS
- MOD
- 다이나밍프로그래밍
- 면접비
- 투포인터
- create databases;
- MySQL
- 동적프로그래밍
- 최소공통조상
- DB 생성
- 서버점검
- 은둔청년체험
- 개발자면접
- 서버개발
- node.js
- 다이나믹프로그래밍
- 그래프
- 면접질문
- 롱베케이션
- 투포인터 연습
- create db
- 로드나인
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |