제목 처럼 socket.io 모듈을 사용하여 서버를 통해 다른 클라이언트로 데이터를 전송하는 방법을 알아보겠습니다.
socket.io 모듈은 nodejs의 내장 모듈이 아니라 설치를 해주어야 합니다.
본인의 프로젝트 폴더에 들어가서 다음과 같은 명령어를 입력하여 설치를 해줍니다.
1
|
npm install --save socket.io
|
다음은 서버 설정 입니다.
[app.js] 서버쪽
1
2
3
4
5
6
7
|
var app = express();
var http = require('http');
var socketio = require('socket.io');
var server = http.createServer(app);
var io = socketio.listen(server);
server.listen(8080);
|
1. http 모듈은 nodejs 내장 모듈이라 따로 설치 ㄴㄴ
2. socket.io 모듈을 처음에 설치해 주었으니 사용한다고 선언해줍니다.
3. 소켓 서버을 설정해줍니다.
****참고로 nodejs 서버의 포트 번호는 3000으로 설정해준 상태입니다.
4. 소켓 서버의 포트 번호는 8080으로 설정해줍니다.
[app.js] 서버쪽
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
29
30
31
32
|
// 소켓 구문 시작 =================================================
io.sockets.on('connection', function(socket){
// 접속한 클라이언트의 정보가 수신되면
socket.on('login', function(data) {
console.log('########클라이언트 로그인########\n USER: ' + data.userid);
// socket에 클라이언트 정보를 저장한다
var room = 'chatting';
// room에 join한다
socket.join(room);
// 접속된 모든 클라이언트에게 메시지를 전송한다
socket.emit('login', '소켓 서버 로그인 성공');
// 클라이언트로 부터 메세지 수신
socket.on('message', function(message){
var data = JSON.stringify(message);
io.to(room).emit('message', data); // room에 join한 유저들에게 데이터 전송
console.log('Message from Client: ' + data);
});
});
// 클라이언트에게 메세지 송신 방법
// io.emit == 접속된 모든 클라이언트에게 메세지 전송
// socket.emit == 메세지를 전송한 클라이언트에게만 전송
// io.to(id).emit == 특정 클라이언트에게만 메세지 전송
// socket.emit('message', '서버 데이터 받음');
});
// 소켓 구문 종료 =================================================
|
다음은 클라이언트 코드를 보도록 하겠습니다.
[index.html] 클라이언트쪽
1
2
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.3.0/socket.io.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.3.0/socket.io.js.map"></script>
|
html 또는 ejs 파일에 위와 같은 cdn을 추가해 줍니다.
그리고 클라이언트 자바스크립트에는
[index.js] 클라이언트쪽
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
// socket.io 서버에 접속한다
var socket = io('http://192.168.XXX.XXX:8080');
socket.emit('login',{
userid: $('#userID').val() // 접속한 회원 정보
});
// 서버로부터의 메시지가 수신되면
// socket.on("login", function(data) {
// alert(data);
// });
//서버로부터의 메시지가 수신되면
socket.on("message", function(data) {
alert(data);
});
//테스트
$('#form_btn').on('click',function(){
socket.emit('message', {
message: $('#test_form').serialize()
});
});
|
위에서 가장 중요한건
1
|
var socket = io('http://192.168.XXX.XXX:8080');
|
이다.
이것을 잘못 입력하면(예를 들어 'localhost:808'로 전송시) 아래와 같은 에러가 뜬다.
정확하게 'localhost:8080'으로 입력해야 에러가 발생하지 않는다.)
에러 이유는 클라이언트 코드와
1
|
var socket = io('http://192.168.XXX.XXX:8080');
|
서버쪽 코드가
1
2
3
4
5
6
7
|
var app = express();
var http = require('http');
var socketio = require('socket.io');
var server = http.createServer(app);
var io = socketio.listen(server);
server.listen(8080);
|
맞지 않는다면 에러가 발생하는 것이다.
정리하자면
nodejs express는 기본적으로 3000번 포트를 사용하며 app 변수는 3000번 포트가 기본적으로 설정되어있다.
var server = http.createServer(app);
var io = socketio.listen(server);
위의 2줄 구문 처럼 app의 3000번 포트 안에 소켓 서버를 설정하고
server.listen(8080); 소켓 서버는 8080포트로 받는것이다.
클라이언트가 웹(3000번)으로 접속하고 소켓서버(8080)으로 데이터를 전송하는 순서이다.
'NodeJS' 카테고리의 다른 글
nodejs-mysql transaction 사용하기 (0) | 2020.08.12 |
---|---|
NODEJS + MYSQL pagination (0) | 2020.06.23 |
nodejs express(centos7) socket.io 내에서 session 데이터 접근 (0) | 2020.03.27 |