클라이언트에 간단한 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)
서버에 "연결"이벤트 리스너를 추가하십시오 :'io.on ('connection', function (socket) { console.log ('사용자가 연결됨'); }); ' – pherris
@pherris 답변에 대한 Thx! 나는 그것을 얻지 않는다. 'io'는 서버에서 이미 청취합니다. 어디에서 추가해야합니까? 제발 큰 코드를 잘라주세요! – mrquad
당신은'io.sockets.on ("connection",'소켓을 제외한 @pherris 코드로 바꾸십시오. ') ... –