2014-12-31 3 views
0

클라이언트에 간단한 socket.io 연결을 구현하고 싶습니다. 이 목적을 위해 express와 함께 nodeJS를 사용합니다.Socket.io - 클라이언트에 연결할 수 없습니다.

내 클라이언트 파일은 같이 :

<!DOCTYPE html> 
<html> 
    <head> 
    <title><%= title %></title> 
    <link rel='stylesheet' href='/stylesheets/style.css' /> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/0.9.16/socket.io.min.js" /> 
    <!--<script src="http://fb.me/react-0.12.2.min.js"></script>--> 
    <script src='/javascripts/socket.js'></script> 
    </head> 
    <body> 
    <h1><%= title %></h1> 
    <p>Welcome to <%= title %> Juhu!</p> 

    </body> 
</html> 

socket.js

/** 
* socket io connection 
*/ 
var socket = io.connect("http://localhost:3000"); 

내 서버 사이트가 다음과 같습니다

var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 

var routes = require('./routes/index'); 
//var users = require('./routes/users'); 

var app = express(); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'ejs'); 

// uncomment after placing your favicon in /public 
//app.use(favicon(__dirname + '/public/favicon.ico')); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({extended: false})); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use('/', routes); 
//app.use('/users', users); 

// catch 404 and forward to error handler 
app.use(function (req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

// error handlers 

// development error handler 
// will print stacktrace 
if (app.get('env') === 'development') { 
    app.use(function (err, req, res, next) { 
     res.status(err.status || 500); 
     res.render('error', { 
      message: err.message, 
      error: err 
     }); 
    }); 
} 

// production error handler 
// no stacktraces leaked to user 
app.use(function (err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
     message: err.message, 
     error: {} 
    }); 
}); 

module.exports = app; 
을 app.js 01 23,516,

www.js 나는 새로운 클라이언트가 nodejs 응용 프로그램에 연결된 적어도 메시지를받을 브라우저를 열 때 내가 기대

#!/usr/bin/env node 
var debug = require('debug')('Test'); 
var app = require('../app'); 
var Pusher = require('pusher-client'); 
var http = require('http'); 

app.set('port', process.env.PORT || 3000); 

//Create the HTTP server with the express app as an argument 
var server = http.createServer(app); 

/*var server = app.listen(app.get('port'), function() { 
    debug('Express server listening on port ' + server.address().port); 
});*/ 

/** 
* return pusher data 
*/ 
var API_KEY = 'cb65d0a7a72cd94adf1f'; 
var pusher = new Pusher(API_KEY, { 
    encrypted: true 
}); 
var channel = pusher.subscribe("ticker.160"); 
channel.bind("message", function (data) { 
    //console.log(data); 
}); 


/** 
* Socket.io 
*/ 
var io = require("socket.io").listen(server, {log: true}); 
var stream = channel.bind("message", function (data) { 
    //console.log(data); 
}); 

io.sockets.on("connection", function (socket) { 
    // The user it's added to the array if it doesn't exist 
    if(users.indexOf(socket.id) === -1) { 
     users.push(socket.id); 
    } 

    // Log 
    logConnectedUsers(); 

    /*// This is a listener to the signal "something" 
    stream.on("start stream", function (data) { 
    console.log("Test: ", data); 
    socket.emit('info', { data: data }); 
    });*/ 

    // This handles when a user is disconnected 
    socket.on("disconnect", function(o) { 
     // find the user in the array 
     var index = users.indexOf(socket.id); 
     if(index != -1) { 
      // Eliminates the user from the array 
      users.splice(index, 1); 
     } 
     logConnectedUsers(); 
    }); 

}); 

// A log function for debugging purposes 
function logConnectedUsers() { 
    console.log("============= CONNECTED USERS =============="); 
    console.log("== :: " + users.length); 
    console.log("============================================"); 
} 

//server listens 
server.listen(app.get('port'), function() { 
    debug('Express server listening on port ' + server.address().port); 
}); 

. 그러나, 나는 아무것도 얻지 않는다.

내가 권장하는 바가 무엇입니까?

/** 
* Socket.io 
*/ 
var io = require("socket.io").listen(server, {log: true}); 
var stream = channel.bind("message", function (data) { 
    //console.log(data); 
}); 

io.on("connection", function (socket) { 
    // The user it's added to the array if it doesn't exist 
    if(users.indexOf(socket.id) === -1) { 
     users.push(socket.id); 
    } 

    // Log 
    logConnectedUsers(); 

    socket.emit('someevent', { attr: 'value' }) 

    /*// This is a listener to the signal "something" 
    stream.on("start stream", function (data) { 
    console.log("Test: ", data); 
    socket.emit('info', { data: data }); 
    });*/ 

    // This handles when a user is disconnected 
    socket.on("disconnect", function(o) { 
     // find the user in the array 
     var index = users.indexOf(socket.id); 
     if(index != -1) { 
      // Eliminates the user from the array 
      users.splice(index, 1); 
     } 
     logConnectedUsers(); 
    }); 

}); 

s all of my console output, when calling 로컬 호스트 : 3000`

Wed, 31 Dec 2014 11:24:00 GMT Test Express server listening on port 3000 
GET/304 19.798 ms - - 
GET /stylesheets/style.css 304 15.385 ms - - 

UPDATE

012 UPDATE

나는 그러나 나는 아직도 연결되지, 다음 코드를 변경 3,516,

내하는 index.js 경로 파일 :

var express = require('express'); 
var router = express.Router(); 

/* GET home page. */ 
router.get('/', function(req, res) { 
    res.render('index', { title: 'Express' }); 
}); 

module.exports = router; 

업데이트

나는 지금 내 페이지의 끝에있는 클라이언트에서 내 socket.js 스크립트를 loadign 다음과 같은 오류 메시지가 도착하고 있습니다 :

GET http://localhost:3000/socket.io/1/?t=1420027015782 400 
(Bad Request)socket.io.min.js:2 d.handshakesocket.io.min.js:2 d.connectsocket.io.min.js:2 dsocket.io.min.js:2 c.connectsocket.js:4 (anonymous function) 
+1

서버에 "연결"이벤트 리스너를 추가하십시오 :'io.on ('connection', function (socket) { console.log ('사용자가 연결됨'); }); ' – pherris

+0

@pherris 답변에 대한 Thx! 나는 그것을 얻지 않는다. 'io'는 서버에서 이미 청취합니다. 어디에서 추가해야합니까? 제발 큰 코드를 잘라주세요! – mrquad

+0

당신은'io.sockets.on ("connection",'소켓을 제외한 @pherris 코드로 바꾸십시오. ') ... –

답변

2

지금까지 보유한 것은 클라이언트가 서버에 연결하는 것입니다. (html + socket.js io.connect()).

아마도 서버에서 클라이언트로 데이터를 보내는 것에 대해 묻는 중입니까? 내부 pherris의 기능, 당신은

io.on('connection', function (socket) { 
    console.log('a user connected') 
    socket.emit('someevent', { attr: 'value' }) 
}) 

와 클라이언트에 데이터를 전송하고

var socket = io.connect("http://localhost:3000"); 

socket.on('someevent', function (data) { console.log(data) }) 

다시 클라이언트 측에서 그것을 잡을 그리고 서버에 다른 이벤트가 보낼 수 있습니다. 두 가지 방법으로 통신 할 수 있습니다. 귀하의 필요에 따라 다릅니다.

+0

! 그러나, 나는 아직도 연결이없는 문제에 직면 해있다. 내 업데이트를 한번보십시오. – mrquad

관련 문제