Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
node.js转发来自';净';要表达的服务器_Node.js_Express_Proxy_Socket.io_Flashsocket - Fatal编程技术网

node.js转发来自';净';要表达的服务器

node.js转发来自';净';要表达的服务器,node.js,express,proxy,socket.io,flashsocket,Node.js,Express,Proxy,Socket.io,Flashsocket,我正在端口8484上运行flash套接字策略服务器。在同一个端口上,我需要接收http请求。我正在考虑检查是否请求了策略文件(在下面的if语句中),如果没有,则将http请求转发到运行express的另一个端口(比如localhost:3000)。我怎样才能得到呢 // flash socket policy server var file = '/etc/flashpolicy.xml', host = 'localhost', port = 8484, poli =

我正在端口8484上运行flash套接字策略服务器。在同一个端口上,我需要接收http请求。我正在考虑检查是否请求了策略文件(在下面的if语句中),如果没有,则将http请求转发到运行express的另一个端口(比如localhost:3000)。我怎样才能得到呢

// flash socket policy server
var file = '/etc/flashpolicy.xml',
    host = 'localhost',
    port =  8484,
    poli = 'something';

var fsps = require('net').createServer(function (stream) {
    stream.setEncoding('utf8');
    stream.setTimeout(10000);
    stream.on('connect', function () {
        console.log('Got connection from ' + stream.remoteAddress + '.');
    });
    stream.on('data', function (data) {
        console.log(data);
        var test = /^<policy-file-request\/>/;
        if (test.test(data)) {
            console.log('Good request. Sending file to ' + stream.remoteAddress + '.')
            stream.end(poli + '\0');
        } else {
            console.log('Not a policy file request ' + stream.remoteAddress + '.');
            stream.end('HTTP\0');

            // FORWARD REQUEST TO localhost:3000 for example //

        }
    });
    stream.on('end', function () {
        stream.end();
    });
    stream.on('timeout', function () {
        console.log('Request from ' + stream.remoteAddress + ' timed out.');
        stream.end();
    });
});

require('fs').readFile(file, 'utf8', function (err, poli) {
    if (err) throw err;
    fsps.listen(port, host);
    console.log('Flash socket policy server running at ' + host + ':' + port + ' and serving ' + file);
});
//闪存套接字策略服务器
var file='/etc/flashpolicy.xml',
主机='localhost',
端口=8484,
poli=‘某物’;
var fsps=require('net')。createServer(函数(流){
stream.setEncoding('utf8');
stream.setTimeout(10000);
stream.on('connect',function(){
log('从'+stream.remoteAddress+'获得连接);
});
stream.on('data',函数(data){
控制台日志(数据);
var检验=/^/;
if(测试、测试(数据)){
console.log('Good request.Sending file to'+stream.remoteAddress+'))
stream.end(poli+'\0');
}否则{
log('不是策略文件请求'+stream.remoteAddress+');
stream.end('HTTP\0');
//将请求转发到localhost:3000,例如//
}
});
stream.on('end',function(){
stream.end();
});
stream.on('timeout',函数(){
log('来自'+stream.remoteAddress+'的请求超时');
stream.end();
});
});
require('fs').readFile(文件'utf8',函数(err,poli){
如果(错误)抛出错误;
监听(端口、主机);
log('Flash socket策略服务器在'+host+'上运行:'+port+'并为'+file'提供服务);
});

我不久前解决了这个问题,但忘记了这个问题:)解决方案是创建一个套接字,它可以在http express服务器和tcp flash策略服务器之间发送和检索数据

闪存策略服务器:

var file = process.argv[2] || '/etc/flashpolicy.xml',
    host = process.argv[3] || 'localhost',
    port = process.argv[4] || 8484,
    poli = 'flash policy data\n',
    net  = require('net'),
    http = require('http');

var fsps = net.createServer(function (stream) {
    stream.setEncoding('utf8');
    stream.on('connect', function () {
        console.log('Got connection from ' + stream.remoteAddress + '.');
    });
    stream.on('data', function (data) {
        var test = /^<policy-file-request\/>/;
        if (test.test(data)) {
            console.log('Good request. Sending file to ' + stream.remoteAddress + '.')
            stream.end(poli + '\0');
        } else {
            console.log('Not a policy file request ' + stream.remoteAddress + '.');

            var serviceSocket = new net.Socket();
            serviceSocket.connect(3000, 'localhost', function () {
                console.log('>>>> Data from 8484 to 3000 >>>>\n', data.toString());
                serviceSocket.write(data);
            });
            serviceSocket.on("data", function (received_data) {
                console.log('<<<< Data from 3000 to 8484 to client <<<<\n', received_data.toString());
                stream.write(received_data);
            });
        }
    });
    stream.on('end', function () {
        console.log('tcp server disconnected');
    });
    stream.on('timeout', function () {
        console.log('Request from ' + stream.remoteAddress + ' timed out.');
    });
});

require('fs').readFile(file, 'utf8', function (err, poli) {
    if (err) throw err;
    fsps.listen(port, host);
    console.log('Flash socket policy server running at ' + host + ':' + port + ' and serving ' + file);
});

你能解释一下你在做什么吗?我试图在同一端口上运行一个带有http服务器的节点网络套接字服务器,但我不知道如何配置它。ewizard-您的express代码或用于http服务器的代码在哪里?嘿,这是一个将通信从网络服务器传递到http服务器的好例子。干得好!
var express = require('express')
  , http = require('http')
  , path = require('path')
  , app = express();

// all environments
app.set('port', process.env.PORT || 3000);

app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/', function(req, res){
  res.send('Proper HTTP response');
});

app.post('/', function(req, res){
  console.log(req.body);
  res.send('Proper HTTP response');
});

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express HTTP server listening on port ' + app.get('port'));
});