Показать сообщение отдельно
Старый 28.12.2011, 21:35
Astraport вне форума Посмотреть профиль Отправить личное сообщение для Astraport Найти все сообщения от Astraport
  № 9  
Ответить с цитированием
Astraport
 
Аватар для Astraport

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
_SoWa, можно по полочкам? А то опять ерунда какая-то. Такого никогда ещё не было, чтобы на хостинге 5 дней не могу простейшую страничку запустить...

1. Создаю в главной флэшке:
Код AS3:
protected function init():void
			{
				var xmlSocket:XMLSocket = new XMLSocket();
				xmlSocket.addEventListener(DataEvent.DATA, onIncomingData);
				xmlSocket.connect("127.0.0.1", 8293);//вот тут какой хост прописывать? localhost или реальный домен приложения? Порт у меня один - 8293
			}
2. server.js - это сервер ноды.
Сначала слушаю net:
Код:
var net = require("net"), sys = require('sys');
var server = net.createServer(function (stream) {
stream.setEncoding("utf8");
stream.on("connect", function () {
sys.puts(sys.inspect(stream, false));
});
stream.on("data", function (data) {

if (data == "<policy-file-request/>\0")
{
    var secure = "<?xml version=\"1.0\"?><cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"*\"/></cross-domain-policy>\0"; //
    console.log("POLICY "+secure);
	stream.write(secure);
}
else
{
    console.log("not secure: "+data);
    stream.write(data);
}
});
stream.on("end", function () {
stream.end();
});
});
//server.listen(843, "127.0.0.1");//этот запрос приводит к тому что в логе сервер пишет, что бесполезно слушать 843 порт, все равно буду слушать только 8293
server.listen(8293, "127.0.0.1");
Ниже начинаю слушать http в том же server.js:
Код:
var io = require('socket.io'),
  http = require('http');

var fs = require('fs'),
  util = require('util');

var url = require('url'),
  path = require('path'),
  mime = require('mime');

function findType(uri) {
  var ext = uri.match(/\.\w+$/gi);
  if (ext && ext.length > 0) {
    ext = ext[0].split(".")[1].toLowerCase();
    return mime.lookup(ext);
  }
  return undefined;
}

function sendError(code, response) {
  response.writeHead(code);
  response.end();
  return;
}

	var app = http.createServer(function(request, response) {
	  var uri = url.parse(request.url).pathname;
	  if (uri === '/') {
		uri = '/index.html';
	  } else if (uri === '/server.js') {
		sendError(404, response);
		return;
	  }
	  var _file = path.join(process.cwd(), uri);
	
	  path.exists(_file, function(exists) {
		if (!exists) {
		  sendError(404, response);
		} else {
		  fs.stat(_file, function(err, stat) {
			var file = __dirname + uri,
				type = findType(uri),
				size = stat.size;
			if (!type) {
			  sendError(500, response);
			}
			response.writeHead(200, {'Content-Type':type + "; charset=utf-8", 'Content-Length':size});
			//var secure = "<?xml version=\"1.0\"?><cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"*\"/></cross-domain-policy>\0";
			//response.write (secure);
			//console.log("POLICY "+secure);
			console.log("START");
			var rs = fs.createReadStream(file);
			util.pump(rs, response, function(err) {
			  if (err) {
				console.log("ReadStream, WriteStream error for util.pump");
				response.end();
			  }
			});
		  });
		}
	  });
	
	});
if (!module.parent) {
  app.listen(8293);
  console.log("Socket-Game listening on port 8291.. ");
}
3. В результате сервер падает с 500 error.
Код:
28 Dec 17:22:50 - Cloudnode wrapped script starting (5453) at Wed Dec 28 2011 17:22:50 GMT+0100 (UTC)
28 Dec 17:22:50 - [INFO] Cloudnode listening on port: 8293
28 Dec 17:22:50 - [INFO] You asked to listen on port: 10843, but cloudnode will use port: 8293 instead..
   [36minfo  -[39m socket.io started
28 Dec 17:22:50 - [INFO] Cloudnode listening on port: 8293
Socket-Game listening on port 8291.. 
   [36minfo  -[39m flashpolicyfileserver received an error event:
eaddrinuse, address already in use
   [33mwarn  -[39m error raised: Error: EADDRINUSE, Address already in use
{ bufferSize: 0,
  fd: 8,
  type: 'tcp4',
  allowHalfOpen: false,
  _readWatcher: 
   { socket: [Circular],
     callback: [Function: onReadable] },
  destroyed: false,
  readable: true,
  _writeQueue: [],
  _writeQueueEncoding: [],
  _writeQueueFD: [],
  _writeQueueCallbacks: [],
  _writeWatcher: 
   { socket: [Circular],
     callback: [Function: onWritable] },
  writable: true,
  _writeImpl: [Function],
  _readImpl: [Function],
  _shutdownImpl: [Function],
  remoteAddress: '127.0.0.1',
  remotePort: 34835,
  server: 
   { _events: { connection: [Function] },
     connections: 1,
     allowHalfOpen: false,
     watcher: { host: [Circular], callback: [Function] },
     listen: [Function],
     type: 'tcp4',
     fd: 9 },
  _decoder: 
   { encoding: 'utf8',
     charBuffer: <Buffer 00 00 00 00>,
     charReceived: 0,
     charLength: 0 },
  _events: 
   { connect: [Function],
     data: [Function],
     end: [Function] } }
not secure: GET / HTTP/1.1

host: myapp.cloudno.de

user-agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0.1) Gecko/20100101 Firefox/8.0.1

accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

accept-language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3

accept-encoding: gzip, deflate

accept-charset: windows-1251,utf-8;q=0.7,*;q=0.7

connection: keep-alive

cache-control: max-age=0

x-forwarded-for: 34.155.192.121

x-forwarded-port: 59778

x-forwarded-proto: http
Запись flashpolicyfileserver received an error event:
eaddrinuse, address already in use
[33mwarn -[39m error raised: Error: EADDRINUSE, Address already in use
доказывает что проблема в политике безопасности.

Прежде чем долбить саппорт хостинга (он бесплатный могут и не ответить), подскажи - все ли верно делаю?