繁体   English   中英

套接字事件未在具有Docker容器的浏览器中触发,docker-compose

[英]Socket events not firing in browser with docker containers, docker-compose

如果不对应用程序进行泊坞窗处理,则一切正常。

将应用程序迁移到Docker时,我无法在浏览器中接收套接字事件。

我能够从浏览器和控制台接收服务器中的套接字事件。

docker-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"

快递服务器

'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')

角度插座

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

我知道我传递套接字引用的方式已关闭,这是如何最小化工作的一个很好的例子。

在请求中传递套接字引用:

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

可以在Express 4中正确完成:

app.set('socketio', io);

在路由中引用:

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

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

套接字现在在Docker容器中工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM