2015년 5월 22일 금요일

server의 socket.io와  client가 정상적으로 연결되지 않음.

  • 발생현상
- server의 socket.io와 client의 socket이 정상적으로 연결되지 않음. 즉 Connection 이벤트가 발생하지 않음.
- client /socket.io/socket.io.js 는 정상적으로 보여짐
- server, client 모두 오류 메시지 없음.

<app.js> 내 소켓 설정 로직
// 소켓 서버 실행
var io = require('socket.io').listen(httpServer);
io.sockets.on('connetion', function(socket) {
  console.log('socket connected!!!');
  socket.on('reserve', function (data) {
    console.log('reserve event on');
    seats[data.y][data.x] = 2;
    io.sockets.emit('reserve', data);
  });
});


<client 로직>
var socket = io.connect();

console.log(socket);
// 이벤트 연결
socket.on('reserve', function(data) {
    var $target = $('div[data-x = ' + data.x + '][data-y = ' + data.y + ']');
    $target.removeClass('enable');
    $target.addClass('disable');
});


<clinet 접속시 서버 terminal 로그>
  => socket connected 메시지가 없음, 오류 없음
baesunghan:~/Documents/workspace/nodejs/reserveMovies$supervisor app.js

Running node-supervisor with
  program 'app.js'
  --watch '.'
  --extensions 'node,js'
  --exec 'node'

Starting child process with 'node app.js'
Watching directory '/Users/baesunghan/Documents/workspace/nodejs/reserveMovies' for changes.
Express server listening port 3000
GET /
304 230.873 ms - -



  • 발생원인
어이 없게도 'connection'이벤트에 대한 오타였음.
// 소켓 서버 실행
var io = require('socket.io').listen(httpServer);
io.sockets.on('connetion', function(socket) {

  • 해결방법
오타를 수정
// 소켓 서버 실행
var io = require('socket.io').listen(httpServer);
io.sockets.on('connection', function(socket) {
  console.log('socket connected!!!');
  socket.on('reserve', function (data) {
    console.log('reserve event on');
    seats[data.y][data.x] = 2;
    io.sockets.emit('reserve', data);
  });
});


테스트시 정상적으로 socket.io 에 대한 connection 이 정상 출력됨
Watching directory '/Users/baesunghan/Documents/workspace/nodejs/reserveMovies' for changes.
Express server listening port 3000
GET /
304 200.241 ms - -
GET /
200 12.503 ms - 356
GET /stylesheets/style.css
304 5.470 ms - -
GET /javascripts/seats.js
200 4.317 ms - 1650
socket connected!!!

=> 이벤트에 대한 코딩 오타가 있는지 모르고 반나절을 해맸음.
=> 오타에 대해서 오류 메시지가 출력될 것이라고 선급하게 생각한 실수임.
=> javascript 이므로 로직이 정상동작 하지 않으면 다시 한번 오타 여부 확인이 필요함.

이 글은 Evernote에서 작성되었습니다. Evernote는 하나의 업무 공간입니다. Evernote를 다운로드하세요.

댓글 없음:

댓글 쓰기