Socket io在docker运行时返回404未找到错误

3
我正在尝试使用SocketIO、Mongodb和NodeJS构建聊天应用程序。当我使用以下命令时,Web应用程序在:80上成功运行:

docker run -d --name mongo mongo

docker run --name appname --link mongo:mongo -p 80:3000 -d docker_user/app

但是,SocketIO继续在浏览器控制台中发送错误,如下所示:

GET http://url/socket.io/?EIO=3&transport=polling&t=MOH41PY 404 (Not Found)

我的index.js如下:
var express = require('express');
var http = require('http').Server(app);

const https = require('https');
var io = require('socket.io')(http);
const mongo = require('mongodb').MongoClient;
var request = require('request');
var path = require('path');
var app = express();

// Set Static path...
app.use(express.static(path.join(__dirname, '/public')));


//Connect to mongo...
mongo.connect('mongodb://mongo:27017/team_chat_data', function(err,db){

  if(err){
  throw(err);
}

//Rest of logic...
});

app.listen(3000, function(){
console.log('Server started on port :3000');
});

现在,我正在尝试使用我的index.html连接到服务器:
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script>
<script>     
// Connect to socket.io
var socket = io.connect('http://url:80');
// Check for connection
if(socket !== undefined){
console.log('Connected to socket...');
// Handle Output
socket.on('output', function(data){
console.log(data);
}); 
</script>

我能在浏览器控制台看到消息连接到套接字,但是随后出现了错误消息,如下:

GET http://url/socket.io/?EIO=3&transport=polling&t=MOH41PY 404 (未找到)

1个回答

2
看起来 Socket.IO 无法拦截以 /socket.io/ 开头的请求。这是因为在您的情况下,监听器是 app - 即 Express 处理程序。您必须使 http 成为监听器,以便 Socket.IO 可以访问请求处理。
尝试替换:
var express = require('express'); // line 1

使用

var app = require('express')();

请参阅文档了解详情:https://socket.io/docs/#Using-with-Express。或者,您可以尝试https://socket.io/docs/#Using-with-Node-http-server

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接