자유 그리고 경험

파이썬 서버 웹 소켓 간단 코드 본문

카테고리 없음

파이썬 서버 웹 소켓 간단 코드

배아줄기세포 2022. 7. 10. 23:47
반응형

목적

파이썬으로 socket 서버를 열고,  HTML 클라이언트로 서버에서의 socket통신을 받아 실시간으로 업데이트하는 간단한 앱을 작성하고자 한다.

Socket

서버 (파이썬)

import asyncio 
import websockets

# call back for websockets.serve(accept,
async def accept(websocket, path): 
    while True:
        data_rcv = await websocket.recv(); # receiving the data from client. 
        print("발신 데이터 " + data_rcv); 
        await websocket.send("반사::" + data_rcv); # send received data

# websocket server creation
websoc_svr = websockets.serve(accept,"localhost",3000);

# waiting 
asyncio.get_event_loop().run_until_complete(websoc_svr); 
asyncio.get_event_loop().run_forever();

socket을 서브하는 websoc_svr를 loop로 돌린다. websockets.serve() 의 첫번째 파라미터인 핸들러에는 소켓의 작동이 구현되어 있다.

클라이언트(HTML, js)

<!DOCTYPE html>
<meta charset="utf-8" />
<title>WebSocket Test</title>

<body>
    <h1>WebSocket Test</h1>
    <div id="output"></div>
</body>

<script language="javascript" type="text/javascript">
 
    var wsUri = "ws://localhost:3000";
    var output;
 
    function init()
    {
        output = document.getElementById("output");
        makeWebSocket();
    }
 
    function makeWebSocket()
    {
        websocket = new WebSocket(wsUri);
        websocket.onopen = function(evt) { onOpen(evt) ;};
        websocket.onclose = function(evt) { onClose(evt) };
        websocket.onmessage = function(evt) { onMessage(evt) };
        websocket.onerror = function(evt) { onError(evt) };
    }
 
    function onOpen(evt)
    {
        writeToScreen("연결완료");
        doSend("테스트 메세지");
    }
 
    function onClose(evt)
    {
        writeToScreen("연결해제");
    }
 
    function onMessage(evt)
    {
        writeToScreen('<span>수신: ' + evt.data + '</span>');
        //websocket.close();
    }
 
    function onError(evt)
    {
        writeToScreen('<span>에러: ' + evt.data + '</span>');
    }
 
    function doSend(message)
    {
        writeToScreen('<span>발신: ' + message + '</span>');
        websocket.send(message);
    }
 
    function writeToScreen(message)
    {
        var p = document.createElement("p");
        p.innerHTML = message;
        output.appendChild(p);
    }
 
    window.addEventListener("load", init, false);
 
</script>
</html>

소켓과의 통신을 간단하게 기록하는 앱.

new Websocket() 을 이용해 소켓을 만들고 각 이벤트마다 핸들러를 구현한다.

 

실행 결과

VSC server 실행 로그
클라이언트 실행 결과

통신이 잘 되는 것을 확인할 수 있다.

이후 다른 소켓에서 데이터를 받아 소켓으로 전송하는 코드를 짜보려고 한다!

반응형
Comments