【问题标题】:Socket.io failed to load resource client side, works on localhostSocket.io 无法加载资源客户端,在 localhost 上工作
【发布时间】:2013-12-15 08:19:25
【问题描述】:

我正在努力使用使用 socket.io 的 Express/Node/PeerJs 应用程序。它在 localhost 中有效,但在推送到 heroku 或 nodejitsu 时无效。

这是我在 app.js 中的内容:

var routes = require('./routes');
var express = require('express');
var path = require('path');
var https = require('https');
var fs = require('fs');
var url = require('url');
var app = express(), 
    http = require('http'),
    server = http.createServer(app), 
    io = require('socket.io');

app.engine('.html', require('ejs').__express);
app.set('port', process.env.PORT || 5500);
app.set('view engine', 'html');
app.set('views', __dirname + '/views');
...

console.log(process.env.port);

app.configure('development', function(){
    app.use(express.errorHandler());
});

server.listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

var sockets = io.listen(server);

app.get('/', function(req, res){
  res.render('index');
});

//more code

在 chatroom.html 中:

<script type="text/javascript"></script>
<script src="myapp.herokuapp.com:5500/socket.io/socket.io.js"></script>
<script src="http://cdn.peerjs.com/0.3/peer.js"></script>

var socket = io.connect('http://myapp.herokuapp.com:5500/');
var peer = new Peer({key: 'mykey', debug: true});

peer.on('open', function(peer) {
    peer_id = peer;
    console.log('my peer id is ' + peer_id);
    socket.emit('peer', {peer_id: peer_id, chatroom: chatroomString});
    console.log('peer id and chatroom string: ', {peer_id: peer_id, chatroom: chatroomString});
});
//rest of code

我尝试过更改 /socket.io/socket.io.js 的路径、添加 http、更改端口以及许多其他愚蠢的事情。然而不幸的是,它在 localhost 中有效,但当我同时推送到 nodejitsu 和 heroku 时却不行。

有一些相对相似的问题(我可以找到),但没有足够的答案。 Socket.io Failed to load resource socket.io: Failed to load resource

不胜感激。

解决方案!!!

在我的 app.js 文件中

var app = express(),
    http = require('http'),
    server = http.createServer(app), 
    io = require('socket.io').listen(server);
var sockets = io;

在我的 chatroom.html 文件中

<script src="/socket.io/socket.io.js"></script>
var socket = io.connect('http://myapp.herokuapp.com/');

您只需从 html 文件中取出端口号。

【问题讨论】:

  • 您没有使用正确的 URL 来加载 socket.io.js。如果这不是问题,请检查您的浏览器控制台以查看是否弹出任何错误。
  • 谢谢。我实际上已经尝试过“/socket.io/socket.io.js”以及“http:myapp.herokuapp.com:5500/socket.io/socket.io.js”和“myapp.herokuapp.com”的所有变体: 5500/socket.io/socket.io.js'。它们都不起作用。
  • 解决方案!!!推heroku时取出端口号!

标签: node.js sockets express socket.io webrtc


【解决方案1】:

Heroku 早期不支持 Websockets。现在支持了。您需要为此设置标志。

https://devcenter.heroku.com/articles/heroku-labs-websockets

即使在设置标志并重新启动应用程序后,套接字仍无法正常工作,请说明您遇到的确切错误。

【讨论】:

    猜你喜欢
    • 2014-07-26
    • 2017-08-17
    • 1970-01-01
    • 2020-11-26
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 2022-08-24
    相关资源
    最近更新 更多