2017-11-07 3 views
0

Ohne Andocken der Anwendung funktioniert alles ordnungsgemäß.Socket-Ereignisse, die nicht im Browser mit Andock-Containern ausgelöst werden, docker-compose

Bei der Migration der Anwendung zu Docker kann ich keine Socket-Ereignisse im Browser empfangen.

Ich bin in der Lage, Socket-Ereignisse auf dem Server vom Browser und der Konsole zu empfangen.

Andockfensters-compose.yml

database: 
    image: mongo:latest 
    container_name: minipool_database 
    ports: 
     - "27017:27017" 

seed: 
    build: seed 
    container_name: mp_seed 
    links: 
     - database 

application: (Node v.7.9.0/socket-io: 1.4.8/Angular 1.4.9/angular-socket-io: 0.7.0) 
    build: application 
    container_name: mp_application 
    links: 
     - database 
    ports: 
     - "8080:8080" 

Express-Server

'use strict'; 

process.env.NODE_ENV = process.env.NODE_ENV || 'development'; 

var connection = ''; 

if(process.env.NODE_ENV === 'development') connection = '127.0.0.1:27017/minipool'; 
if(process.env.NODE_ENV === 'production') connection = 'database:27017/minipool'; 

var express = require('express'), 
    app = express(), 
    server = require('http').Server(app), 
    io = require('socket.io')(server); 

app.use(function(req, res, next) { 
    res.header("Access-Control-Allow-Origin", "*") 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept") 
    next() 
}); 

app.use(express.static('./')); 

app.use(function(req,res,next){ 
    req.io = io; 
    next(); 
}); 

server.listen(8080, function() {}); 

io.on('connection', function(socket){ 
    var User = require('./api/model/api.model.user'); 
    var user_id = ''; 

    // Update socket id on connection 
    socket.on('join', function(data){ 
     user_id = data._id; 
     // Save socket.id on load 
    }); 
}); 

index.html

script(src='/socket.io/socket.io.js') 

Winkel-socket-io

var socket = options.ioSocket || io.connect(); 

Antwort

0

Ich wusste, dass die Art und Weise, wie ich die Socket-Referenz passierte, ausgeschaltet war, ein gutes Beispiel dafür, wie etwas minimal funktionieren kann.

die Socket-Referenz in der Anfrage Passing hier:

exports.index = function(req, res) { 
    var io = req.app.get('socketio'); 

    io.to(user.sockets[j]).emit("game-update", { 
      game: game 
     }); 
}); 

Sockets arbeiten:

app.set('socketio', io); 

in einer Route referenzierte:

app.use(function(req,res,next){ 
    req.io = io; 
    next(); 
}); 

Kann richtig in Express 4 erfolgen jetzt in Docker-Containern.

Verwandte Themen