node.js - 当我在服务器上部署时不断收到 "socket.io/?EIO=3&transport=polling&t=Lvm1SGO"404 错误

标签 node.js sockets socket.io browserify

我的应用程序在本地主机上运行良好,但是一旦我上传它,我就会不断收到“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 服务器。

这确实看起来像这样: Description Apache

问题是 Apache 不知道如何处理传入的 Socket.io 请求。现在最简单的选择是扩展服务器并让 socket.io 连接到另一个端口: Description Apache and Socket.io

所以一切都和以前一样。

在此示例设置中,您已在开发服务器上安装了 Apache(如您提到的服务器)。您可以访问服务器 shell。

  1. 将包含express和socket.io文件的文件传输到服务器(除了Web根目录之外,不在/var/www中。我建议将其放在/home/myUserName/[productname]中)。

  2. 确保服务器上安装了nodeJS和NPM

  3. 如果您没有传输node_modules,请执行npm install来安装软件包。

  4. 将端口设置为 80 以外的值 - 可能是 3000。记住这个数字。

  5. 像在客户端上一样启动服务器(node index.js 或类似的东西)

  6. 如果您现在通过端口 3000 ( http://myServerDomainOrIp:3000 ) 访问服务器,您应该会得到与客户端相同的结果。但您想要(或必须)使用 apache Web 服务器。因此,在 apache web 文件中打开启动 socket.io 客户端的文件。在此周围应该有一行:var socket = io();。将其更改为 socket.connect('http://myServerDomainOrIp:3000');

因此静态文件通过 apache 提供服务,但 socket.io 连接是与 Nodejs 服务器建立的。

希望你能理解一点,正确的知道。 Apache 和 Socket.IO 有点复杂。

关于node.js - 当我在服务器上部署时不断收到 "socket.io/?EIO=3&transport=polling&t=Lvm1SGO"404 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46151327/

相关文章:

Node.js Selenium 找不到元素。没有这样的元素错误

sql-server - 使用 Node mssql在mssql表中批量插入数据

javascript - 用于面向用户的字符串的常量中间件

node.js - Express-Generator - 包括 socket.io (bin/www)

sockets - 通讯应用程序。数据存储与消息队列

redis - 在哪里可以找到完整的节点 redis 命令列表?

javascript - 错误 : No version of chokidar is available. 已尝试 chokidar@2 和 chokidar@3。将 npm 升级到 7.*.* 后

Java : clean up runnable object with socket

c - 文件处理扰乱了对称的客户端-服务器通信

c - 使用套接字一个一个地发送多个字符串时出现问题