2017-09-11 3 views
0

Mon application fonctionne correctement sur localhost mais une fois que je l'ai téléchargée, je reçois toujours "socket.io/?EIO=3 & transport = interrogation & t = Lvm1SGO "404 erreurs qui continuent d'être répertoriées dans la console. Désolé si c'est une question stupide mais je suis assez nouveau avec socket.io. Voici où vous pouvez vérifier et voir l'erreur dans l'action: http://95.211.186.223/projects/webrtc/work/P2PImage/Continuer à recevoir des erreurs "socket.io/?EIO=3&transport=polling&t=Lvm1SGO" 404 lors de mon déploiement sur le serveur

Mon fichier 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); 
    }); 
}); 

Mon fichier 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") 
}); 
+0

On dirait qu'il s'agit d'un serveur apache: http://95.211.186.223/projects/webrtc/work/P2PImage/socket.io Socket.io est uniquement disponible dans le script node.js.Vous devez soit ajouter un proxy à apache ou installer nginx, soit changer le port que le serveur express écoute. – Larce

+0

Je vois. Je vous remercie. Vous avez mentionné "ou changez le port que le serveur express écoute". Cela signifie qu'il existe une solution qui n'utilise pas ngnix? Si oui, comment puis-je accomplir cela? Encore une fois. Vraiment désolé pour les questions stupides. Je suis très nouveau à ce sujet. –

Répondre

0

problème vous est que vous essayez de contacter un serveur nodejs sur un serveur apache.

Cela ne ressemble à ceci: Description Apache

Le problème est que Apache ne sait pas comment gérer la demande Socket.io entrante. L'option la plus simple est maintenant de développer le serveur et de laisser socket.io se connecter à un autre port: Description Apache and Socket.io

Tout est comme avant.

Dans cet exemple de configuration, Apache est installé sur un serveur de développement (comme celui que vous avez mentionné). Vous avez accès au shell des serveurs.

  1. Transférez vos fichiers contenant l'Express et les fichiers Socket.IO au serveur (en plus du répertoire racine web, pas dans/var/www. Je recommande de le mettre dans/home/myUserName/[ProductName]).

  2. Assurez-vous que NodeJS et NPM est installé sur le serveur

  3. Si vous n'avez pas transféré node_modules, exécutez npm install pour installer les packages.

  4. Définissez le port sur autre chose que 80, probablement 3000. N'oubliez pas ce numéro.

  5. Démarrez le serveur comme vous le faites sur votre client (node index.js ou quelque chose de similaire)

  6. Si vous accédez à votre serveur via le port 3000 connaissez (http://myServerDomainOrIp:3000) vous devriez obtenir les mêmes résultats que sur le client. Mais vous voulez (ou devez) utiliser le serveur web Apache. Donc, ouvrez dans les fichiers web Apache le fichier qui démarre le client socket.io. Il devrait y avoir une ligne autour de ceci: var socket = io();. Changez cette socket.connect('http://myServerDomainOrIp:3000');

fichiers statiques sont donc serverd sur apache, mais la connexion est établie socket.io avec le serveur nodejs.

J'espère que vous comprenez un peu le droit sait. Apache et Socket.IO sont un peu compliqués.

+0

Merci beaucoup. Cela m'a beaucoup aidé. J'ai réussi à résoudre le problème et je comprends parfaitement où je me suis trompé précédemment. –