我正在尝试使用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 (Not Found)
答案 0 :(得分:2)
看起来Socket.IO无法拦截以/socket.io/开头的请求。这是因为在您的情况下,侦听器是应用程序-Express处理程序。您必须使http成为侦听器,以便Socket.IO可以访问请求处理。
尝试更换
var express = require('express'); // line 1
使用
var app = require('express')();
有关详细信息,请参阅文档:https://socket.io/docs/#Using-with-Express