在服务器上部署时不断收到 "socket.io/?EIO=3&transport=polling&t=Lvm1SGO" 404 错误
Keep getting "socket.io/?EIO=3&transport=polling&t=Lvm1SGO" 404 errors when I deploy on server
我的应用程序在本地主机上运行良好,但一旦我上传它,我就不断收到 "socket.io/?EIO=3&transport=polling&t=Lvm1SGO" 404 错误,这些错误一直在控制台中列出。
对不起,如果这是一个愚蠢的问题,但我对 socket.io 还很陌生。
您可以在此处检查并查看操作中的错误:http://95.211.186.223/projects/webrtc/work/P2PImage/
我的 client.js 文件:
// this file is meant to be browserified
var P2P = require("socket.io-p2p");
var io = require("socket.io-client");
var ss = require("socket.io-stream");
var socket = io();
var opts = {autoUpgrade: true, peerOpts: {numClients: 10}};
var p2p = new P2P(socket, opts);
var $ = require("jquery");
p2p.on("peer-num", function(num) {
console.log("You are peer number " + num);
$(".peerNum").html( "Number " + num );
});
p2p.on("file", function(stream) {
//console.log(stream);
var img = document.createElement("img");
img.src = (window.URL || window.webkitURL).createObjectURL(new Blob(stream));
document.getElementById("receivedImages").appendChild(img);
});
$(function() {
$("#file").change(function(e) {
ss.forceBase64 = true;
var file = e.target.files[0];
var stream = ss.createStream();
ss(socket).emit("file", stream, {size: file.size,name:file.name});
var blobStream = ss.createBlobReadStream(file);
var size = 0;
blobStream.on("data", function(chunk) {
size += chunk.length;
console.log(Math.floor(size / file.size * 100) + "%");
});
blobStream.pipe(stream);
});
});
我的 server.js 文件:
var app = require("express")();
var express = require("express");
var server = require("http").Server(app);
var p2pserver = require("socket.io-p2p-server").Server;
var io = require("socket.io")(server);
var ss = require("socket.io-stream");
var path = require("path");
app.use(express.static(__dirname));
io.use(p2pserver);
var peerNum = 0;
io.on("connection", function(socket) {
console.log("Peer " + peerNum + " connected");
io.emit("peer-num", peerNum);
peerNum++;
ss(socket).on("file", function(stream, data) {
var filename = path.basename(data.name);
var parts = [];
stream.on("data", function(data) {
parts.push(data);
});
stream.on("end", function() {
socket.broadcast.emit("file", parts);
});
});
});
server.listen(3000, function () {
console.log("Listening on 3000")
});
你的问题是你试图联系 apache 服务器上的 nodejs 服务器。
看起来确实像这样:
问题是 Apache 不知道如何处理传入的 Socket.io 请求。现在最简单的选择是扩展服务器并让 socket.io 连接到另一个端口:
所以一切都和以前一样。
在此示例设置中,您在开发服务器(如您提到的服务器)上安装了 Apache。您可以访问服务器 shell.
把你的express文件和socket.io文件传到服务器(web根目录除外,不在/var/www)。我建议放在/home/myUserName/[产品名称]).
确保服务器上安装了nodeJS和NPM
如果你没有传输node_modules,执行npm install
安装包。
将端口设置为 80 以外的其他值 - 可能是 3000。记住这个数字。
像在客户端上一样启动服务器(node index.js
或类似的东西)
如果您现在通过端口 3000 (http://myServerDomainOrIp:3000) 访问服务器,您应该会得到与客户端相同的结果。但是您想要(或不得不)使用 apache 网络服务器。所以在 apache web 文件中打开启动 socket.io 客户端的文件。周围应该有一行:var socket = io();
。将其更改为 socket.connect('http://myServerDomainOrIp:3000');
所以静态文件是通过 apache 服务器的,但是 socket.io 连接是与 nodejs 服务器建立的。
希望你明白一点吧知道。 Apache 和 Socket.IO 有点复杂。
我的应用程序在本地主机上运行良好,但一旦我上传它,我就不断收到 "socket.io/?EIO=3&transport=polling&t=Lvm1SGO" 404 错误,这些错误一直在控制台中列出。 对不起,如果这是一个愚蠢的问题,但我对 socket.io 还很陌生。 您可以在此处检查并查看操作中的错误:http://95.211.186.223/projects/webrtc/work/P2PImage/
我的 client.js 文件:
// this file is meant to be browserified
var P2P = require("socket.io-p2p");
var io = require("socket.io-client");
var ss = require("socket.io-stream");
var socket = io();
var opts = {autoUpgrade: true, peerOpts: {numClients: 10}};
var p2p = new P2P(socket, opts);
var $ = require("jquery");
p2p.on("peer-num", function(num) {
console.log("You are peer number " + num);
$(".peerNum").html( "Number " + num );
});
p2p.on("file", function(stream) {
//console.log(stream);
var img = document.createElement("img");
img.src = (window.URL || window.webkitURL).createObjectURL(new Blob(stream));
document.getElementById("receivedImages").appendChild(img);
});
$(function() {
$("#file").change(function(e) {
ss.forceBase64 = true;
var file = e.target.files[0];
var stream = ss.createStream();
ss(socket).emit("file", stream, {size: file.size,name:file.name});
var blobStream = ss.createBlobReadStream(file);
var size = 0;
blobStream.on("data", function(chunk) {
size += chunk.length;
console.log(Math.floor(size / file.size * 100) + "%");
});
blobStream.pipe(stream);
});
});
我的 server.js 文件:
var app = require("express")();
var express = require("express");
var server = require("http").Server(app);
var p2pserver = require("socket.io-p2p-server").Server;
var io = require("socket.io")(server);
var ss = require("socket.io-stream");
var path = require("path");
app.use(express.static(__dirname));
io.use(p2pserver);
var peerNum = 0;
io.on("connection", function(socket) {
console.log("Peer " + peerNum + " connected");
io.emit("peer-num", peerNum);
peerNum++;
ss(socket).on("file", function(stream, data) {
var filename = path.basename(data.name);
var parts = [];
stream.on("data", function(data) {
parts.push(data);
});
stream.on("end", function() {
socket.broadcast.emit("file", parts);
});
});
});
server.listen(3000, function () {
console.log("Listening on 3000")
});
你的问题是你试图联系 apache 服务器上的 nodejs 服务器。
看起来确实像这样:
问题是 Apache 不知道如何处理传入的 Socket.io 请求。现在最简单的选择是扩展服务器并让 socket.io 连接到另一个端口:
所以一切都和以前一样。
在此示例设置中,您在开发服务器(如您提到的服务器)上安装了 Apache。您可以访问服务器 shell.
把你的express文件和socket.io文件传到服务器(web根目录除外,不在/var/www)。我建议放在/home/myUserName/[产品名称]).
确保服务器上安装了nodeJS和NPM
如果你没有传输node_modules,执行
npm install
安装包。将端口设置为 80 以外的其他值 - 可能是 3000。记住这个数字。
像在客户端上一样启动服务器(
node index.js
或类似的东西)如果您现在通过端口 3000 (http://myServerDomainOrIp:3000) 访问服务器,您应该会得到与客户端相同的结果。但是您想要(或不得不)使用 apache 网络服务器。所以在 apache web 文件中打开启动 socket.io 客户端的文件。周围应该有一行:
var socket = io();
。将其更改为socket.connect('http://myServerDomainOrIp:3000');
所以静态文件是通过 apache 服务器的,但是 socket.io 连接是与 nodejs 服务器建立的。
希望你明白一点吧知道。 Apache 和 Socket.IO 有点复杂。