Javascript nodejs+;express+;socket.io>;远程服务器上的套接字客户端连接问题

Javascript nodejs+;express+;socket.io>;远程服务器上的套接字客户端连接问题,javascript,node.js,sockets,heroku,socket.io,Javascript,Node.js,Sockets,Heroku,Socket.io,我正在尝试使用NodeJS、Express ans socket.io进行一些聊天 对于使用localhost、log4js调试Im,并且在本地工作正常,socket.io工作正常 但当我尝试在远程服务器上部署它时,它不起作用。 这里有一个链接 我在谷歌上搜索过Ofc,写过类似的话题,尝试过很多东西,但都不起作用 未能加载资源:服务器以404状态响应 io客户端:套接字错误{“类型”:“TransportError”,“description”:404} 或 io客户端:套接字错误{“类型”:“

我正在尝试使用NodeJS、Express ans socket.io进行一些聊天

对于使用localhost、log4js调试Im,并且在本地工作正常,socket.io工作正常

但当我尝试在远程服务器上部署它时,它不起作用。 这里有一个链接 我在谷歌上搜索过Ofc,写过类似的话题,尝试过很多东西,但都不起作用

未能加载资源:服务器以404状态响应

io客户端:套接字错误{“类型”:“TransportError”,“description”:404}

io客户端:套接字错误{“类型”:“TransportError”,“描述”:0}

我的服务器app.js包括以下内容:

var express = require('express'),
app = express(),
logger = require('log4js').getLogger();
server = require('http').Server(app),
io = require('socket.io')(server),
此已注释的块改为服务器=。。和io=。。当我试图在远程服务器(heroku)上部署我的应用程序时

当我尝试在heroku上部署应用程序时,我会对服务器进行注释。。下面的街区

var pug = require('pug'),
port = 4000;

server.listen(port, '127.0.0.1', ()=>{
    var addr = server.address();
    logger.level = 'debug';
    logger.debug('listening on ' + addr.address + ':' + addr.port);
});

app.use(express.static(__dirname + '/public'));


app.get('/socket.io.js', (req,res)=>{
    res.sendFile(__dirname + '/node_modules/socket.io-client/dist/socket.io.js');
});

app.get('/socket.io/socket.io.js', (req,res)=>{
    res.sendFile(__dirname + '/node_modules/socket.io-client/dist/socket.io.js');
});


app.get('/jquery.js', (req,res)=>{
    res.sendFile(__dirname + '/node_modules/jquery/dist/jquery.min.js');
});
app.set('views', __dirname + '/views');
app.set('view engine', 'pug');

const amazingStuff = 'Its amazing stuff, ',
date = new Date;

app.get('/', (req,res)=>{
    res.render('pages/index', {
    title: 'main page',
    message: date,
    showChat: false
});

io.on('connection', (socket)=>{

socket.on('newUserJoin', (userName)=>{


    socket.session = {};
    socket.session.userName = userName;
    socket.session.address = socket.handshake.address;
    socket.session.id = socket.id;

    socket.broadcast.emit('newUser', socket.session);
    socket.emit('user', socket.session)
    socket.emit('userLisr', io.length)

    logger.info('user ' + socket.session.userName + ' / ip ' + socket.session.address)
    logger.info('user count: ' + io.engine.clientsCount)
    logger.debug(socket.session)

    var clients = io.sockets.connected,
        clientList = {};
    
    for (var i in clients){
        if(clients[i].session) clientList[i] = clients[i].session;
    }
    
    socket.emit('clientList', clientList);

})

//get a new message and share it to all users
socket.on('newMessage', (message)=>{
    socket.broadcast.emit('shareMessage', message)
})

})

app.listen(app.get('port'), function() {
   console.log('Node app is running on port', app.get('port'));
});
版本:

  "devDependencies": {
    "nodemon": "^1.11.0"
  },
  "dependencies": {
     "express": "^4.15.3",
     "jquery": "^3.2.1",
     "log4js": "^2.3.3",
     "pug": "^2.0.0-rc.3",
     "socket.io": "^2.0.3"
   }
客户端,main.js:

var socket = io();
//var socket = io.connect('https://cryptic-fjord-64553.herokuapp.com/');
和处理程序

这里是在html(pug)中添加脚本,首先在本地工作,注释的内容是我试图在heroku上部署的尝试,但它不起作用

script(src='/socket.io/socket.io.js')
//-script(src='/socket.io.js')
//-script(src='https://cryptic-fjord-64553.herokuapp.com/socket.io.js')
你不能打开上面的链接,看看控制台里发生了什么。没有关于客户端脚本的警告,我是说main.js文件,所以它可以连接到服务器,main.js知道什么是“io”。因此,html和socket.io中的链接与服务器的连接似乎没有问题。因此,服务器端app.js可能存在问题


我怎样才能强迫它在heroku上工作?

试试这个:我试过了。仍然没有工作。也许我做错了什么,但是。。我不明白var io=require('socket.io client')如何实现;在客户端工作,因为我遇到错误“require is not define”试试这个:我试过了。仍然没有工作。也许我做错了什么,但是。。我不明白var io=require('socket.io client')如何实现;在客户端工作,因为我收到错误“require is not define”
script(src='/socket.io/socket.io.js')
//-script(src='/socket.io.js')
//-script(src='https://cryptic-fjord-64553.herokuapp.com/socket.io.js')