자유 그리고 경험
파이썬 서버 웹 소켓 간단 코드 본문
반응형
목적
파이썬으로 socket 서버를 열고, HTML 클라이언트로 서버에서의 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() 을 이용해 소켓을 만들고 각 이벤트마다 핸들러를 구현한다.
실행 결과
통신이 잘 되는 것을 확인할 수 있다.
이후 다른 소켓에서 데이터를 받아 소켓으로 전송하는 코드를 짜보려고 한다!
반응형
Comments