프로젝트

[CatchLounge] socketio를 이용한, 새로고침 (db 변경 시)

미뿌감 2024. 9. 5. 12:40
728x90

1. 개요

만약 특정 자리의 이용 시간이 만료 되어서, apscheduler를 이용한 db 수정이 일어난다고 해도, 화면 상에서는 변화가 없을 것이다.

따라서 db에 변경이 있을 시, 새로고침이 되도록 하는 코드를 작성해 보았다.

 

2. 코드

from flask_socketio import SocketIO

app = Flask(__name__)
socketio = SocketIO(app)

if __name__ == "__main__":
    socketio.run(app.run("0.0.0.0", port=5001, debug=True))

 

우선 import를 해두었으며, if 문에서 socketio.run 또한 잊지 않고 해주었다.

 

db에 대한 변경이 일어나는 코드 밑에다가 emit_db_update()를 호출해 주었다.

def emit_db_update():
    socketio.emit('db_update', {'data':'Database update'})

이를 통해 socket에 db_update라는 이름으로 데이터들이 전달된다.

 

이제 client 측 코드를 확인해 보자.

        $(document).ready(function () {
            var socket = io.connect('http://127.0.0.1:5001');

            socket.on('db_update', function(){
                location.reload();
            })

        });

 

우선 client 측에서 socket과 연결이 지어져야 하기 때문에, document가 준비가 되면, 바로 명시된 도메인에 연결하도록 하였다.

 

deploy 하게 된다면, deploy 된 도메인 주소로 변경해 주어야 한다.

배포된 도메인이 ssl 인증서를 적용한 상태라면, 아래와 같이 wss를 붙여주어야 한다.

wss://potato.shop

 

socket에 input이 들어오게 된다면, socket.on('db_update ... 아래의 function이 작동되게 되고, 

location.reload()를 시켜준다.

 

이를 통해 socket을 구독한, 모든 client에서, 화면이 reload 되게 된다.

728x90