websocket을 직접 해보니 브라우져 지원 여부를 확실히 한계가 있다는 게 느꼈다..
기존 언어에서 통신 관련 옵션을 지원했던 거라든가. 좀 더 명확한 api가 있으면 좋겠다는 생각을 했다. 


그래서 socket.io에 이런 내용이 없나 봤더니.. 좀 있다. 
http://socket.io/#announcement



  1. You need to think about how you encode and interpret messages.
  2. It's hard to achieve interoperability with 3rd-party code.
  3. Logic for "connecting" or "disconnecting" specific parts of the application are inexistent.
  4. Authentication, error-handling for different subsets of functionality introduce even more difficulties.

     

아웃사이더님이 잘 요약해주셨다. 한글자료이니 잘 참조하면 될듯 하다. 
http://blog.outsider.ne.kr/668

 

연결에 대해서 명확한 개념을 socket.io에 구현했다. 

Websocket 코드 
var a = new WebSocket();

a
.onmessage = function (msg) {
 
var msg = JSON.parse(msg);
 
if (msg.type == 'chat') {
   
Chat.handle(msg.data);
 
} else {
   
// do something else
 
}
};

namespace 관련해서 Socket.io 구현 코드  확실히 깔끔한 느낌이 있다. 

<script>
 
var chat = io.connect('/chat');
  chat
.on('message', function () {
   
// chat socket messages
 
});
  chat
.on('disconnect', function () {
   
// chat disconnect event
 
});

 
var news = io.connect('/news');
  news
.on('item', function () {
   
// a new `news` socket event is here
 
});
</script>

파라미터 (인코딩/디코딩)도 쉽다.  send 함수에서 emit 을 쓰면 api 의 유용성이 풍부해진다. 

// client-side
var socket = io.connect();
socket
.emit('set nickname', 'john', function (response) {
  console
.log(response);
});

// server-side
// …
socket
.on('set nickname', function (nick, fn) {
 
if (nick == 'rauchg') {
    fn
({ err: 'nickname in use' });
 
}
});

 

Room기능이 추가되었다.
소켓 내에서 room을 구분해서 쓸 수 있게 되었다. 
io.sockets.on('connection', function (socket) {
  socket
.join('a room');
  socket
.broadcast.to('a room').send('im here');
  io
.sockets.in('some other room').emit('hi');
});


역쉬 socket.io 에서 쓰는 이유가 있군.. websocket에 대해서 좀 더 쉽고 깔끔한 코드를 지원한다. 







'scribbling' 카테고리의 다른 글

윈도우 (window) 7 에서 xe + cubrid + xe 1.5.0.8 개발환경 셋팅  (0) 2011.11.04
Socket.io 설치 와 간단 사용  (0) 2011.11.02
websocket #3  (0) 2011.10.31
websocket #2 (node.js 설치)  (1) 2011.10.31
websocket #1  (0) 2011.10.28
Posted by '김용환'
,