socket.io란?
브라우저에서 websocket 호환이 안되는 경우, 적절한 통신 방법으로 전환해 통신하는 라이브러리 입니다. 이제 대부분의 브라우저가 websocket을 사용할 수 있게 되었지만, 다양한 기능과 안정성으로 사용을 추천합니다.
callback 함수란?
특정 함수의 실행이 마무리 되면 호출하는 함수입니다. 통신에서 꼭 필요한 기능입니다.
Requirements
pip install aiohttp python-socketio
서버를 구동하기 위한 다양한 옵션이 있었는데, 저는 aiohttp를 사용했습니다.
Server.py
from aiohttp import web
import socketio
import os
import time
# 정적 호스팅 서버를 이용하기 위한 cors 옵션 추가.
# 별도 클라이언트를 띄워주지 않는다.
sio = socketio.AsyncServer(cors_allowed_origins="*")
app = web.Application()
sio.attach(app)
@sio.event
def connect(sid, environ):
print("connect ", sid)
@sio.event
def disconnect(sid):
print('disconnect ', sid)
os._exit(1) #강제종료
@sio.event
def callback(sid, data):
print(data)
time.sleep(3)
return "Here is your callback"
if __name__ == '__main__':
web.run_app(app, host="localhost", port=8080)
* 2022.09.09 업데이트 - host와 port 지정 추가. os._exit(1)을 이용한 강제종료 추가
Client.html
<!DOCTYPE html>
<html>
<body>
<button onclick="requestCallback()">Button</button>
</body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/3.0.3/socket.io.min.js"></script>
<script>
const socket = io("http://localhost:8080", {
autoConnect : false,
reconnection : false
});
socket.on('connect', () => {
console.log(`connect ${socket.id}`);
});
socket.on('disconnect', () => {
console.log(`disconnect ${socket.id}`);
});
const requestCallback = () => {
socket.emit("callback", "need callback", response => console.log(response));
}
</script>
</html>
* 2022.09.09 업데이트 - autoConnect, reconnection 기능 추가.
기타
Github를 이용한 정적호스팅을 이용해 접속할 예정이므로, 클라이언트를 띄워주지 않도록 했습니다.
예전에 리니지W 웹버전으로 개발할 당시 websocket의 연결 끊김문제 해결과 코드 간결화를 위해 알아본 내용을 정리한 글 입니다.
[끝].
728x90
'소프트웨어 > 파이썬' 카테고리의 다른 글
[파이썬] JSON 파일 불러오기 (1) | 2022.08.04 |
---|---|
[파이썬] pywin32를 이용해 윈도우 화면에 그리기 (0) | 2022.06.02 |
[파이썬] 화상 키보드 비활성으로 클릭하기 (1) | 2022.05.29 |
[파이썬] 윈도우 화면 캡처 (with mss) (3) | 2022.03.10 |
[파이썬] 소켓 통신 예제 (0) | 2022.02.15 |
댓글