본문 바로가기

Study/HTML5,CSS,JQuery

[HTML5/CSS3/JQUERY] channel message

CHANNEL MESSAGING

다대다 메세지 통신을 실현하기 위한 API

MessageChannel이라는 채널을 통해 메시지를 송수신하게 되는데,

메시지의 출입구가 되는 채널에는 두 개의 port가 있어서 port1에 수신된 메시지는 port2로 전달되고

port2에 수신된 메시지는 port1으로 전달된다.

각각의 port는 MessagePort라는 type의 object로 다음과 같은 method와 속성을 가진다.

 

Method

 설명

 start()

port를 사용할 수 있게 한다. 두 개의 port 모두 start 해줘야 한다. 

 close()

port를 중지한다.

 postMessage

port에 message를 보낸다. 보낸 message는 상대편 port로부터 읽어들인다.

 onmessage

port에 message가 도착하면 이 속성에 지정된 event handler가 호출된다.

 

 

 

 

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8"> 
<title>Insert title here</title> 
<!-- <script type="text/javascript" src="js/jquery-1.8.1.min.js"></script> --> 
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script> 
<style type="text/css"> 
    .messageLog{ width:200px; height:200px; overflow:scroll; float:left; } 
</style> 

<script type="text/javascript"> 
    var channel = new MessageChannel(); 
    channel.port1.start(); 
    channel.port2.start(); 
     
    function addDisplay() { 
        // div 생성 
        var div = document.createElement("div"); 
        div.className = "messageLog"; 
         
        // 위에 생성한 div를 추가한다. 
        document.getElementById("messageLogs").appendChild(div); 
         
        channel.port2.addEventListener("message", function(e) { 
            // div를 계속 추가한다. 
            div.innerHTML += "<div>"+e.data+"</div>"; 
        }, false); 
    } 
     
    function showMsg() { 
        var msg = document.getElementById("msg").value; 
        channel.port1.postMessage(msg); 
    } 
     
    window.onload = function() { 
        btnSend = document.getElementById("btnSend"); 
        btnSend.addEventListener("click", showMsg, false); 
        btnNew = document.getElementById("btnNew"); 
        btnNew.addEventListener("click", addDisplay, false); 
    } 
</script> 
</head> 
<body> 
    <h3>Channel Messasing Example</h3> 
    <input type="text" id="msg" /> 
    <input type="button" id="btnSend" value="송신" /> 
    <input type="button" id="btnNew" value="표시 영역 추가" /> 
    <div id="messageLogs"></div>     
</body> 
</html>