2014-02-14 2 views
1

json 데이터를 개인 TCP 포트 13854에서 공용 웹 소켓 8080으로 프록시하려고합니다. http://localhost:8080을 탐색 할 때 데이터를 가져올 수없는 이유는 무엇입니까?NodeJS 도움말 프록시 웹 소켓에 대한 TCP 포트 데이터

var http = require('http').createServer(httpHandler), 
    fs = require("fs"), 
    wsock = require('socket.io').listen(http), 
    tcpsock = require('net'); 

var proxyPort = 8080; 
var serviceHost = 'localhost'; 
var servicePort = 13854; 

function httpHandler (req, res) { 
    res.setHeader("Access-Control-Allow-Origin", "http://example.com"); 
    res.end(); 
} 

http.listen(proxyPort); 
console.info("HTTP server listening on " + proxyPort); 

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

    var tcpClient = new tcpsock.Socket(); 
    tcpClient.setEncoding("ascii"); 
    tcpClient.setKeepAlive(true); 

    tcpClient.connect(servicePort, serviceHost, function() { 
     console.info('CONNECTED TO : ' + serviceHost + ':' + servicePort); 

     tcpClient.on('data', function(data) { 
     data = "" + data 
     //send format request to socket 
     if (data[0] != '{'){ 
      s.write(JSON.stringify({ 
       enableRawOutput : false, 
       format : "Json" 
      }) + "\n"); 
      return; 
     } 
      console.log('DATA: ' + data); 
      socket.emit("httpServer", data); 
     }); 

     tcpClient.on('end', function(data) { 
      console.log('END DATA : ' + data); 
     }); 
    }); 

    socket.on('tcp-manager', function(message) { 
     console.log('"tcp" : ' + message); 
     return; 
    }); 

    socket.emit("httpServer", "Initial Data"); 
}); 

고맙습니다!

모든
+0

'localhost : 8080'을 탐색하면 웹 소켓 연결이 설정되지 않습니다. –

답변

1

코드를 재구성하고 소켓을 분리하여 문제를 해결했습니다. 어떤 이유로 든 Access-Control-Allow-Origin은 필요하지 않은 것처럼 보입니다. 저는 "Simple Web Socket Client"라는 Chrome 플러그인을 사용하여 제 클라이언트를 작성해야합니다.

var ws = require("nodejs-websocket"), 
    net = require("net"); 

var server = ws.createServer(function(conn) { 
    conn.on("close", function(code, reason) { 
     console.log("Connection closed"); 
    }); 
}).listen(8080); 

var tcp = new net.Socket(); 
console.log('connecting to 127.0.0.1:13854'); 

tcp.connect(servicePort, '127.0.0.1', function() { 

    //this socket requires sending data on connection 
    tcp.write(JSON.stringify({ 
      enableRawOutput: false, 
      format: "Json" 
    }) + "\n"); 
}); 

tcp.on("data", function(data) { 
    if (server == null || server.connections == null) { 
     return; 
    } 

    //broadcast message: 
    server.connections.forEach(function(conn) { 
     conn.sendText(data); 
    }); 
} 
1

먼저 , 당신은 localhost에 검색되기 때문에 원점 http://example.com이 아니기 때문에, 요청이 거부됩니다

res.setHeader("Access-Control-Allow-Origin", "*"); 

에 선

res.setHeader("Access-Control-Allow-Origin", "http://example.com"); 

을 변경합니다.

두 번째로 데이터를 수신하려면 클라이언트와 웹 소켓 연결을 설정해야합니다. http://localhost:8080으로 탐색하면 웹 소켓 연결이 아닌 http 연결이 만들어집니다. HTML 페이지를 로컬로 생성하고 서버를 두 번 클릭하여 HTML 페이지를 사용하도록 제안합니다. 나중에 node.js 서버에서 페이지를 호스팅 할 수 있습니다. http://socket.io의 예를보고 socket.io 클라이언트를 올바르게 작성하십시오.

관련 문제