NodeJS帮助将TCP端口数据代理到Web套接字

我试图从一个专用的TCP端口13854代理JSON数据到一个公共的networking套接字端口8080.为什么我不能得到任何数据时浏览http://localhost:8080

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

谢谢!

首先 ,改变线路

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

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

由于您浏览localhost ,您的请求将被拒绝,因为来源不是http://example.com

其次 ,为了接收数据,您必须设置客户端的Web套接字连接。 只要浏览到http://localhost:8080就会创build一个http连接,而不是一个web套接字连接。 我build议在本地创build一个HTML页面,并通过双击(而不是通过你的服务器)来使用它。 稍后,您可以在您的node.js服务器上托pipe该页面。 看看http://socket.io上的例子来正确创build一个socket.io客户端。

我通过重组我的代码并保持套接字分开来解决了这个问题。 无论出于何种原因,似乎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); }); }