2017-09-11 5 views
0

내 응용 프로그램은 로컬 호스트에서 제대로 작동하지만 일단 업로드하면 "socket.io/?EIO=3 &"이 계속 나타납니다. transport = polling & t = Lvm1SGO "404 오류가 콘솔에 계속 표시됩니다. 죄송합니다.이 질문이 멍청한 질문인데 socket.io에서 상당히 새로 왔습니다. http://95.211.186.223/projects/webrtc/work/P2PImage/서버에 배포 할 때 "socket.io/?EIO=3&transport=polling&t=Lvm1SGO"404 오류가 계속 발생합니다

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

아파치 서버는 다음과 같습니다. http://95.211.186.223/projects/webrtc/work/P2PImage/socket.io Socket.io는 node.js 스크립트에서만 사용할 수 있습니다.아파치에 프록시를 추가하거나 nginx를 설치하거나 익스프레스 서버가 청취하는 포트를 변경해야합니다. – Larce

+0

나는 본다. 고맙습니다. "또는 익스프레스 서버가 청취중인 포트를 변경하십시오." Ngnix를 사용하지 않는 솔루션이 있다는 것을 의미합니까? 그렇다면 어떻게 수행 할 수 있습니까? 다시. 바보 같은 질문에 정말 죄송합니다. 나는 이것에 아주 새롭다. –

답변

0

당신의 문제는 당신 것입니다 당신이 검사하고 행동 오류를 볼 수있는 여기 입니다 아파치 서버의 nodejs 서버에 접속하려고합니다.

이 같이 않습니다 Description Apache

문제는 아파치가 들어오는 Socket.io 요청을 처리하는 방법을 알고하지 않습니다. 가장 간단한 옵션은 서버를 확장하고 socket.io가 다른 포트에 연결되도록하는 것입니다 : Description Apache and Socket.io

그래서 모든 것이 이전과 같습니다.

이 예제 설치에서는 Apache를 (예 : 언급 한 것과 같은) dev 서버에 설치합니다. 서버 쉘에 액세스 할 수 있습니다.

  1. 전송 웹 루트 디렉토리 이외의 서버에 명시하고 socket.io 파일을 (지주 파일은,하지의/var/www가에서. 나는/홈/MyUserName 에다/[ProductName]을 (를)에 넣어 추천).

  2. 는, node_modules을 전송하여 패키지를 설치합니다 npm install을 실행하지 않은 경우 nodeJS과 NPM 서버

  3. 에 설치되어 있는지 확인합니다.

  4. 포트를 80 - 아마도 3000 이외의 값으로 설정하십시오.이 숫자를 기억하십시오. 당신이 당신의 서버에 액세스 클라이언트에서와 같은 결과를 얻을해야 포트 3000 (http://myServerDomainOrIp:3000)를 통해 알고 있다면 당신은 당신의 클라이언트에서 (유사 node index.js 또는 무언가)

  5. 을 같이

  6. 서버를 시작

    . 하지만 아파치 웹 서버를 사용하기를 원한다. 그래서 아파치 웹에서 socket.io 클라이언트를 시작하는 파일을 엽니 다. 이 주변에 줄이 있어야합니다 : var socket = io();. socket.connect('http://myServerDomainOrIp:3000');

그래서 정적 파일이 변경 아파치 이상 ServerD에는이 있지만 socket.io 연결은 nodejs 서버로 설정됩니다.

조금 알고있는 것으로 알고 있기를 바랍니다. Apache와 Socket.IO는 약간 복잡합니다.

+0

정말 고마워요. 이것은 나를 많이 도왔습니다. 문제를 해결할 수 있었고 이전에 어디서 잘못 읽었는지 완전히 이해했습니다. –