socket.io 로 구현한 간단한 채팅 서버 소스코드
마스터욱
0
26
0
0
2022-12-04 23:51:40
/* Chat.js */
// 앱 실행명령어(백그라운드에서 실행)
// # node index.js > /dev/null &
// Dependencies
const fs = require('fs');
const http = require('http');
const https = require('https');
const express = require('express');
const app = express();
// letsencrypt 인증서 경로
const lets_path = '/etc/letsencrypt/live/도메인/';
const privateKey = fs.readFileSync(lets_path + 'privkey.pem', 'utf8');
const certificate = fs.readFileSync(lets_path + 'cert.pem', 'utf8');
const ca = fs.readFileSync(lets_path + 'chain.pem', 'utf8');
const credentials = {
key: privateKey,
cert: certificate,
ca: ca
};
app.use((req, res) => {
res.send('욱이의 채팅서버입니다. 웹으로는 들어오지 마세용~ (o^3^)o~');
});
// Starting both http & https servers
const httpServer = http.createServer(app);
const httpsServer = https.createServer(credentials, app);
////////////////////////////// 채팅 클래스
class Chat
{
constructor(arg = {}){
this.protocol = arg['protocol'];
this.server = arg['server'];
this.port = arg['port'];
this.usrcnt = 0;
this.io = null;
}
init(){
this.server.listen(this.port, () => {
console.log(this.protocol + ' Server running on port ' + this.port);
});
this.io = require('socket.io')(this.server);
this.io.on('connection', (socket) => {
console.log('user connected');
//메세지 수신시
socket.on('send', (res) => {
//socket.emit('recv', data); //메세지를 발송한 본인에게만
console.log('recv ok');
this.io.emit('recv', res); //전체 커넥션 유저들에게
});
//메세지 삭제시
socket.on('msg_del', (msg_idx) => {
this.io.emit('msg_del_result', msg_idx); //전체 커넥션 유저들에게
});
//브라우저 접속시
this.usrcnt++;
console.log('connect', this.usrcnt);
this.io.emit('usr_cnt_'+this.protocol, this.usrcnt);
//브라우저를 떠날때 실행됨
socket.on('disconnect', () => {
this.usrcnt--;
console.log('disconnect', this.usrcnt);
this.io.emit('usr_cnt_'+this.protocol, this.usrcnt);
});
});
}
}
var httpChat = new Chat({'protocol':'http', 'server':httpServer, 'port':'39'});
httpChat.init();
var httpsChat = new Chat({'protocol':'https', 'server':httpsServer, 'port':'443'});
httpsChat.init();
================================================================================
http랑 https 두개의 프로토콜이 모두 사용되어지는 채팅 클래스 소스코드 입니다.