1

我在 express.js 中使用 socket.io,在 angular 4 中使用 socket.io-client,并带有以下 Caddyfile(它的一部分):

proxy /api web-api:8080 {
    transparent
}

proxy /socket.io web-api:8080 {
  header_upstream Host {host}
  header_upstream X-Real-IP {remote}
  header_upstream X-Forwarded-For {remote}
  websocket
}

使用以下命令通过 Dockerfile 执行 Caddy 服务器:

CMD         ["caddy", "-http2=false"]

在角度部分,我使用以下代码(部分代码):

let observable = new Observable(observer => {
  this.socket = io.connect(`${environment.apiUrl}`);
  this.socket.on('message', (message: any) => {
    observer.next(message);
  });
  return () => {
    this.socket.disconnect();
  };
});
return observable;

在 express.js 上如下:

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

在开发模式下(既没有使用 docker 也没有使用 caddy)一切都按预期工作,但在生产模式下,我不断在浏览器的控制台中以这种形式收到 POST 和 GET 响应/请求(没有任何错误):

...
http://my-app-example/socket.io/?EIO=3&transport=polling&t=MFB2-Bv
http://my-app-example/socket.io/?EIO=3&transport=polling&t=MFB31eM
http://my-app-example/socket.io/?EIO=3&transport=polling&t=MFB2_oS
...

似乎“发射”事件永远不会被解雇。也许它与 Docker 容器内的套接字通信有关。

4

0 回答 0