websocket을 직접 해보니 브라우져 지원 여부를 확실히 한계가 있다는 게 느꼈다..
기존 언어에서 통신 관련 옵션을 지원했던 거라든가. 좀 더 명확한 api가 있으면 좋겠다는 생각을 했다.
그래서 socket.io에 이런 내용이 없나 봤더니.. 좀 있다.
http://socket.io/#announcement
- You need to think about how you encode and interpret messages.
- It's hard to achieve interoperability with 3rd-party code.
- Logic for "connecting" or "disconnecting" specific parts of the application are inexistent.
- 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 |