그래서 싱글 톤 패턴을 사용하여 websocket을 설정하고 있습니다. Client Side에서 Node.js의 Socket.io를 사용하여 routes 파일을 내보내는 방법
var sio = require('socket.io')
var io = null;
exports.io = function() {
var socket;
if(io === null){ // Initialise if not already made
io = initialize(server);
}
return io;
};
exports.initialize = function(server) {
io = sio.listen(server);
var connections = [];
console.log('IO Initialized!\n')
io.on('connection', function(socket){
connections.push(socket);
console.log('Connected: %s sockets connected', connections.length);
socket.on('disconnect', function(data){
connections.splice(connections.indexOf(socket), 1);
console.log('Disconnected: %s sockets connected', connections.length);
});
// Update function used to send messages to and from backend
socket.on('update', function(data){
io.sockets.emit('new message', {msg: data});
});
});
};
그리고 내 자바 스크립트/공공 파일에 내가 경로 파일에서 성공적으로 방출 할 수있다
router.use(function(req, res, next){
if(socket === undefined){
socket = io.io();
}
next();
});
router.get('/', function(req, res, next){
socket.on('update', function(data){
console.log('in routes');
});
socket.emit('update', 'leaving routes');
});
내가 가진 너무
$(function(){
var socket = io.connect();
socket.emit('update', 'Test Update');
socket.on('update', function(data){
console.log('here: ' + data);
});
});
처럼 내 경로 파일에 다음을 호출 할 수 있습니다 공개 js 파일 (백엔드에서 프론트 엔드로). 그러나 공용 js 파일에서 라우트 파일로 정보를 보낼 수는 없으며 싱글 톤 패턴 js 파일로만 보냅니다. 대신 경로 파일로 보내려면 어떻게해야합니까? 내가이 일을 잘못한다면 경로와 공개 js 파일 사이의 의사 소통 방법에 대한 exapmle을 제공해 줄 수 있습니까?
'소켓'이 무엇인지 오해하고있는 것을 알 수 있습니다. 들어오는 클라이언트 연결마다 고유 한 개체입니다. 그것은 싱글 톤이 아닙니다. 당신은 단지 글로벌이라고 부를 수 없습니다. 사실, 당신이 실제로 사용할 수있는 유일한 곳은'io.on ('connection', ....) 핸들러 내부입니다. 왜냐하면 그것이 새로운 각'socket' 객체에 연결을 제공하기 때문입니다. 경로에서 수행하려는 작업이 그 순간에 요청을하는 특정 사용자의 소켓 객체에 액세스하는 것이라면 이는 완전히 다른 질문이며이를 탐구하는 다른 많은 대답이 있습니다. – jfriend00
"express socket.io connection in express route"를 검색하여 찾고자하는 것을 찾으십시오. 이 두 가지를 연결하는 일반적인 방법은 세션 객체를 통해 이루어지며 socket.io 연결이 연결될 때 세션에서 초기화를 수행하여 나중에 경로에서 소켓에서 소켓 .id에 액세스 할 수 있습니다. 당신은 소켓 객체를 얻을 수있다. – jfriend00