2014-07-22 3 views
2

나는 여기에 내 서버원격 Node.js 서버에 연결하는 방법은 무엇입니까?

C9.io을 사용하고 있습니다 : https://xxx-c9-smartytwiti.c9.io을 내 코드는 다음 URL에서 실행되고 있는지 말해 : 나는이 URL을 생성하는 실행하면

var io = require('socket.io'); 


    var socket = io.listen(8080, { /* options */ }); 
    socket.set('log level', 1); 


    socket.on('connection', function(socket) { 

     console.log("connected"); 

    socket.on('message1', function(data) { 
      socket.emit("message1",JSON.stringify({type:'type1',message: 'messageContent'})); 

    }); 

    socket.on('disconnect', function() { 

     console.log("diconnected"); 

    }); 
    }); 

합니다.

는 : XXX 내가 내 고객에 무슨 짓을 내 작업 공간

입니다 : 연결에 "https://xxx-c9-smartytwiti.c9.io:8080/" ....

다음

내가 콘솔 (파이어 폭스 브라우저)에서이 오류가 발생합니다 :

cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://xxx-c9-smartytwiti.c9.io:8080/socket.io/1/?t=1406060495041. This can be fixed by moving the resource to the same domain or enabling CORS. 

: 내가 로컬 내 서버를 호스트가 완벽하게 작동 할 때.

프록시 또는 방화벽을 사용하는 c9.io처럼 보이지만 원격으로 c9.io로 작성된 코드를 어떻게 테스트 할 수 있습니까?

UPDATE

는 루벤의 응답에 따르면 난 내 서버를 변경했습니다, 그리고 나는했습니다 (내 socket.io 클라이언트는 C9에서 호스팅하지만 여전히 원격 클라이언트 작업이 얻을 수없는 경우 작동 또한 내 FTP에서 클라이언트하지만 같은 결과를) 호스팅 :

// module dependencies 
var http = require("http"), 
    sio = require("socket.io"); 

// create http server 
var server = http.createServer().listen(process.env.PORT, process.env.IP), 

// create socket server 
io = sio.listen(server); 

// set socket.io debugging 
io.set('log level', 1); 


io.set('origins', '*:*'); 


io.sockets.on('connection', function (socket) { 


    socket.emit('news', { message: 'Hello world!' }); 

    socket.on('my other event', function (data) { 
    console.log(data.message); 
    }); 

}); 

이 .. 원래 구성이 무시 된 것처럼, 나 또한 C9.io 확실하지 않다

제안을 같은데?

건배.

답변

2

대신 process.env.IPprocess.env.PORT을 사용하려고 포트 8080을 사용하는 대신 Socket.IO에게 호스트/포트를 제공, 당신은 그것을 웹 서버 객체를 제공합니다. 또한 도메인의 포트를 작업 영역에 지정하지 않는 것이 중요합니다. 기본 포트 (포트 80)는 c9.io에 컨테이너의 내부 포트로 전달됩니다. 기본 포트를 지정하지 않고 기본 포트에 연결하면 도메인 간 보안에 문제가 없습니다.

은 참조 : https://c9.io/site/blog/2013/05/native-websockets-support/

루벤 - Cloud9 지원

크리스, 당신은 나에게 문서에 대한 링크를 제공 할 수 있습니다, 내가 ..
+0

감사합니다. Ruben, 이제 내 클라이언트 코드가 c9에서 작동하지만 원격 액세스에서 여전히 "교차 원점 요청 차단됨"이 표시됩니다. 내 업데이트를 참조하십시오. –

2

Same-origin policy은 클라이언트 코드와 WebSocket 서버가 동일한 URL과 포트에서 호스팅되어야합니다. 당신은 Socket.IO docs에 그들을 통합하는 방법의 구체적인 예를 찾을 수 있습니다. 다음은 내장 HTTP 서버를 사용하여 수행하는 방법에 대한 예제입니다.

var app = require('http').createServer(handler) 
var io = require('socket.io')(app); 
var fs = require('fs'); 

app.listen(80); 

function handler (req, res) { 
    fs.readFile(__dirname + '/index.html', 
    function (err, data) { 
    if (err) { 
     res.writeHead(500); 
     return res.end('Error loading index.html'); 
    } 

    res.writeHead(200); 
    res.end(data); 
    }); 
} 

io.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
    console.log(data); 
    }); 
}); 
+0

감사합니다 당신이 사용하고 있습니까? –

+0

어떤 웹 서버를 찾고 있어요 찾을 수없는 – Chris

+0

내 업데이트 Chris를 참조하십시오. –

관련 문제