Olá gente, como é muito fácil, "hehe" consegui instalar e configurar e criar um servidor locar e testar tranquilamente.
Gostaria de saber como trabalharia em produção, segurança, etc. Trabalho atualmente com php, um arquivo externo linkando o socket io é capaz de se conectar ao servidor?
Até o momento só obtive sucesso com arquivos renderizados pelo servidor.
> Olá gente, como é muito fácil, "hehe" consegui instalar e configurar e
> criar um servidor locar e testar tranquilamente.
> Gostaria de saber como trabalharia em produção, segurança, etc. Trabalho
> atualmente com php, um arquivo externo linkando o socket io é capaz de se
> conectar ao servidor?
> Até o momento só obtive sucesso com arquivos renderizados pelo servidor.
Por exemplo, se a preocupação for DoS, uma simples uncaught exception
derruba sua app e ela nunca mais volta sem intervenção (ex, cluster,
supervisor, etc...).
Mario
Em 20 de junho de 2012 08:43, Marcelo Wanderley
<marcelo.de...@gmail.com>escreveu:
> Ainda não li nada sobre este assunto com nodeJs.
> Abraços.
> On 18 jun, 23:40, "Rafael O. Bueno" <rafacuritiba...@gmail.com> wrote:
> > Olá gente, como é muito fácil, "hehe" consegui instalar e configurar e
> > criar um servidor locar e testar tranquilamente.
> > Gostaria de saber como trabalharia em produção, segurança, etc. Trabalho
> > atualmente com php, um arquivo externo linkando o socket io é capaz de se
> > conectar ao servidor?
> > Até o momento só obtive sucesso com arquivos renderizados pelo servidor.
Para o desenvolvedor, por em quanto, a idéia é sempre utilizar funções
anônimas e tomar os mesmos cuidados que se tem com outras linguagens de
programação.
Em 20 de junho de 2012 10:06, Mario Augusto Mania
<mario.ma...@gmail.com>escreveu:
> Por exemplo, se a preocupação for DoS, uma simples uncaught exception
> derruba sua app e ela nunca mais volta sem intervenção (ex, cluster,
> supervisor, etc...).
> Mario
> Em 20 de junho de 2012 08:43, Marcelo Wanderley <marcelo.de...@gmail.com>escreveu:
>> Olá Rafael,
>> Você tem a mesma dúvida...
>> Segurança.
>> Ainda não li nada sobre este assunto com nodeJs.
>> Abraços.
>> On 18 jun, 23:40, "Rafael O. Bueno" <rafacuritiba...@gmail.com> wrote:
>> > Olá gente, como é muito fácil, "hehe" consegui instalar e configurar e
>> > criar um servidor locar e testar tranquilamente.
>> > Gostaria de saber como trabalharia em produção, segurança, etc. Trabalho
>> > atualmente com php, um arquivo externo linkando o socket io é capaz de
>> se
>> > conectar ao servidor?
>> > Até o momento só obtive sucesso com arquivos renderizados pelo servidor.
> Para o desenvolvedor, por em quanto, a idéia é sempre utilizar funções
> anônimas e tomar os mesmos cuidados que se tem com outras linguagens de
> programação.
De que forma o uso de funções anônimas ajuda na segurança?
Tive essa mesma dúvida qd comecei a mexer com node.
Faça um teste simples. Estou anexando o exemplo q fiz aqui pra vc executar
aí na sua máquina. Nele eu executo o comando vmstat e jogo o resultado em
realtime para o browser, onde acesso um arquivo index.php.
index.php - coloque esse arquivo dentro do seu apache,nginx....
vmstat.js - coloque esse arquivo dentro de um path qualquer, por exemplo:
/tmp/vmstat
package.json - coloque esse arquivo dentro do mesmo path do vmstat.js:
/tmp/vmstat
Entre em /tmp/vmstat e instale as dependências:
$> cd /tmp/vmstat
$> npm install
Execute o servidor:
$> node vmstat.js
Abra seu browser e acesse o arquivo index.php (http:localhost/index.php).
Isso que te passei foi apenas uma prova de conceito, coisa bastante
simples, bem amadora....
Para ambiente de produção, sugiro:
- isolar serviços em servidores diferentes;
- utilizar proxy na frente do nodejs (apache, nginx, ...);
- utilizar CORS, pra controlar quem pode consumir seu serviço socket.io;
- particularmente, eu gosto de utilizar o forever para executar os serviços
node, mas existem outras alternativas.
- utilize algum banco de dados nosql, como redis, para controlar as
sessões, principalmente se vc estiver executando o serviço node em cluster.
- e claro! um servidor com todas características de segurança/otimizações
implementadas: firewall, tunning, ....
Luiz
2012/6/19 Rafael O. Bueno <rafacuritiba...@gmail.com>
> Olá gente, como é muito fácil, "hehe" consegui instalar e configurar e
> criar um servidor locar e testar tranquilamente.
> Gostaria de saber como trabalharia em produção, segurança, etc. Trabalho
> atualmente com php, um arquivo externo linkando o socket io é capaz de se
> conectar ao servidor?
> Até o momento só obtive sucesso com arquivos renderizados pelo servidor.
Na verdade eu deveria ter falado *closure*, não é?
Se uma função estiver no escopo global ela poderá ser chamada através do
console e até mesmo sobrescrita.
No exemplo 1 a função está aberta. No exemplo 2 ela é anônima e por tanto
só pode ser acessada dentro do escopo em que ela foi criada.
*Exemplo 1*
// Script:
function testSecurity() {
console.log('open function?');
}
// Console:
> testSecurity();
* "open function?"*
> function testSecurity() { console.log('fuu'); }
> testSecurity();
*"fuu"*
*Exemplo 2*
// Script:
(function () {
var foo = function (param) {
console.log(param);
};
foo('foo() dentro do escopo');
})();
foo('foo() fora do escopo');
// Console:
*"foo() dentro do escopo"*
Uncaught ReferenceError: foo is not defined (anonymous function) >
foo('mais um teste');
ReferenceError: foo is not defined
Em 20 de junho de 2012 11:20, Luciano Ramalho <luci...@ramalho.org>escreveu:
> 2012/6/20 André Caribé <decocar...@gmail.com>:
> > Para o desenvolvedor, por em quanto, a idéia é sempre utilizar funções
> > anônimas e tomar os mesmos cuidados que se tem com outras linguagens de
> > programação.
> De que forma o uso de funções anônimas ajuda na segurança?
> [ ]s
> Luciano
> --
> Luciano Ramalho
> NOVO TWITTER: @ramalhoorg
> Na verdade eu deveria ter falado closure, não é?
> Se uma função estiver no escopo global ela poderá ser chamada através do
> console e até mesmo sobrescrita.
> No exemplo 1 a função está aberta. No exemplo 2 ela é anônima e por tanto só
> pode ser acessada dentro do escopo em que ela foi criada.
> Exemplo 2
> // Script:
> (function () {
> var foo = function (param) {
> console.log(param);
> };
> foo('foo() dentro do escopo');
> })();
> foo('foo() fora do escopo');
> // Console:
> "foo() dentro do escopo"
> Uncaught ReferenceError: foo is not defined (anonymous function) > foo('mais
> um teste');
> ReferenceError: foo is not defined
É por aí, André. Infelizmente existem muitos mitos e confusões ligadas
ao tema das funções em JavaScript.
A questão não tem nada a ver com o fato de a função ser anônima ou ter
nome, e sim com a forma de sua declaração, se ela é declarada com a
instrução function (function statement) ou na forma de uma expressão
função. Acontece que muitas pessoas confundem "função anônima" com
"expressão função".
Veja estes exemplos:
(function bloco () {
function f (arg) {
console.log(arg);
};
var g = function (arg) {
console.log(arg);
};
var h = function hugo (arg) {
console.log(arg);
};
});
f('bla');
A função f foi declarada em uma instrução function. Essa instrução
"iça" a função para o escopo global (em inglês: içar == hoist), e ela
pode ser acessada fora do bloco, como vemos na última linha.
As funções g e h foram declarada em expressões. Nestes casos não
acontece o içamento (hoisting) e as funções g e h só podem ser
acessada no escopo local da função bloco. Note que a função h não é
uma função anônima, ela se chama hugo (isso é útil para depuração;
especialmente se a função chamada hugo for vinculada a uma variável de
mesmo nome ;-).
Finalmente, a função bloco é uma função com nome (ela se chama bloco)
mas foi definida em uma expressão (este é o motivo de usar parêntesis
em torno da definição da função; sem os parêntesis seria uma instrução
function).
Resumindo, o içamento para o escopo global acontece sempre que a
função é definida em uma instrução function, e nunca quando ela é
definida em uma expressão, independente de ser ou não uma função
anônima. É por causa dessa confusão com a instrução function que o
Douglas Crockford recomenda nunca usar esta forma, mas sempre definir
funções em expressões.
Puxa... muito obrigado a todos, pelos esclarecimentos e exemplos, vou
seguir em frente e fazer meus testes, se tiverem mais dicas preciosas como
essas... MUITO OBRIGADO GENTE, já me alegra de ver uma comunidade ativa
assim!
Abraços!
Em 20 de junho de 2012 17:05, Luciano Ramalho <luci...@ramalho.org>escreveu:
> 2012/6/20 André Caribé <decocar...@gmail.com>:
> > Na verdade eu deveria ter falado closure, não é?
> > Se uma função estiver no escopo global ela poderá ser chamada através do
> > console e até mesmo sobrescrita.
> > No exemplo 1 a função está aberta. No exemplo 2 ela é anônima e por
> tanto só
> > pode ser acessada dentro do escopo em que ela foi criada.
> > Exemplo 2
> > // Script:
> > (function () {
> > var foo = function (param) {
> > console.log(param);
> > };
> > foo('foo() dentro do escopo');
> > })();
> > foo('foo() fora do escopo');
> > // Console:
> > "foo() dentro do escopo"
> > Uncaught ReferenceError: foo is not defined (anonymous function) >
> foo('mais
> > um teste');
> > ReferenceError: foo is not defined
> É por aí, André. Infelizmente existem muitos mitos e confusões ligadas
> ao tema das funções em JavaScript.
> A questão não tem nada a ver com o fato de a função ser anônima ou ter
> nome, e sim com a forma de sua declaração, se ela é declarada com a
> instrução function (function statement) ou na forma de uma expressão
> função. Acontece que muitas pessoas confundem "função anônima" com
> "expressão função".
> Veja estes exemplos:
> (function bloco () {
> function f (arg) {
> console.log(arg);
> };
> var g = function (arg) {
> console.log(arg);
> };
> var h = function hugo (arg) {
> console.log(arg);
> };
> });
> f('bla');
> A função f foi declarada em uma instrução function. Essa instrução
> "iça" a função para o escopo global (em inglês: içar == hoist), e ela
> pode ser acessada fora do bloco, como vemos na última linha.
> As funções g e h foram declarada em expressões. Nestes casos não
> acontece o içamento (hoisting) e as funções g e h só podem ser
> acessada no escopo local da função bloco. Note que a função h não é
> uma função anônima, ela se chama hugo (isso é útil para depuração;
> especialmente se a função chamada hugo for vinculada a uma variável de
> mesmo nome ;-).
> Finalmente, a função bloco é uma função com nome (ela se chama bloco)
> mas foi definida em uma expressão (este é o motivo de usar parêntesis
> em torno da definição da função; sem os parêntesis seria uma instrução
> function).
> Resumindo, o içamento para o escopo global acontece sempre que a
> função é definida em uma instrução function, e nunca quando ela é
> definida em uma expressão, independente de ser ou não uma função
> anônima. É por causa dessa confusão com a instrução function que o
> Douglas Crockford recomenda nunca usar esta forma, mas sempre definir
> funções em expressões.
> [ ]s
> Luciano
> --
> Luciano Ramalho
> NOVO TWITTER: @ramalhoorg
> Puxa... muito obrigado a todos, pelos esclarecimentos e exemplos, vou
> seguir em frente e fazer meus testes, se tiverem mais dicas preciosas como
> essas... MUITO OBRIGADO GENTE, já me alegra de ver uma comunidade ativa
> assim!
> Abraços!
> Em 20 de junho de 2012 17:05, Luciano Ramalho <luci...@ramalho.org>escreveu:
> 2012/6/20 André Caribé <decocar...@gmail.com>:
>> > Na verdade eu deveria ter falado closure, não é?
>> > Se uma função estiver no escopo global ela poderá ser chamada através do
>> > console e até mesmo sobrescrita.
>> > No exemplo 1 a função está aberta. No exemplo 2 ela é anônima e por
>> tanto só
>> > pode ser acessada dentro do escopo em que ela foi criada.
>> > Exemplo 2
>> > // Script:
>> > (function () {
>> > var foo = function (param) {
>> > console.log(param);
>> > };
>> > foo('foo() dentro do escopo');
>> > })();
>> > foo('foo() fora do escopo');
>> > // Console:
>> > "foo() dentro do escopo"
>> > Uncaught ReferenceError: foo is not defined (anonymous function) >
>> foo('mais
>> > um teste');
>> > ReferenceError: foo is not defined
>> É por aí, André. Infelizmente existem muitos mitos e confusões ligadas
>> ao tema das funções em JavaScript.
>> A questão não tem nada a ver com o fato de a função ser anônima ou ter
>> nome, e sim com a forma de sua declaração, se ela é declarada com a
>> instrução function (function statement) ou na forma de uma expressão
>> função. Acontece que muitas pessoas confundem "função anônima" com
>> "expressão função".
>> Veja estes exemplos:
>> (function bloco () {
>> function f (arg) {
>> console.log(arg);
>> };
>> var g = function (arg) {
>> console.log(arg);
>> };
>> var h = function hugo (arg) {
>> console.log(arg);
>> };
>> });
>> f('bla');
>> A função f foi declarada em uma instrução function. Essa instrução
>> "iça" a função para o escopo global (em inglês: içar == hoist), e ela
>> pode ser acessada fora do bloco, como vemos na última linha.
>> As funções g e h foram declarada em expressões. Nestes casos não
>> acontece o içamento (hoisting) e as funções g e h só podem ser
>> acessada no escopo local da função bloco. Note que a função h não é
>> uma função anônima, ela se chama hugo (isso é útil para depuração;
>> especialmente se a função chamada hugo for vinculada a uma variável de
>> mesmo nome ;-).
>> Finalmente, a função bloco é uma função com nome (ela se chama bloco)
>> mas foi definida em uma expressão (este é o motivo de usar parêntesis
>> em torno da definição da função; sem os parêntesis seria uma instrução
>> function).
>> Resumindo, o içamento para o escopo global acontece sempre que a
>> função é definida em uma instrução function, e nunca quando ela é
>> definida em uma expressão, independente de ser ou não uma função
>> anônima. É por causa dessa confusão com a instrução function que o
>> Douglas Crockford recomenda nunca usar esta forma, mas sempre definir
>> funções em expressões.
>> [ ]s
>> Luciano
>> --
>> Luciano Ramalho
>> NOVO TWITTER: @ramalhoorg
Eu acho que os cuidados são os mesmos do que outras linguagem,
principalmente a validação dos user inputs. As únicas coisas a
acrescentar é o gerenciamento do processo que como já foi falado antes
se o seu processo morrer por um erro grave ou qualquer outra coisa,
ele não volta sozinho, e o tratamento de dados jogados na memória, por
exemplo:
var user = new Array;
setInterval(function(){
user.push('Hit!');
});
Uma hora ou outra o processo vai quebrar e o seu site estará fora do ar.
--
Att,
Alan Hoffmeister
Em 20 de junho de 2012 21:49, André Caribé <decocar...@gmail.com> escreveu:
> Muito esclarecedora sua explicação Luciano, muito obrigado! :)
> Em 20 de junho de 2012 20:47, Rafael O. Bueno <rafacuritiba...@gmail.com>
> escreveu:
>> Puxa... muito obrigado a todos, pelos esclarecimentos e exemplos, vou
>> seguir em frente e fazer meus testes, se tiverem mais dicas preciosas como
>> essas... MUITO OBRIGADO GENTE, já me alegra de ver uma comunidade ativa
>> assim!
>> Abraços!
>> Em 20 de junho de 2012 17:05, Luciano Ramalho <luci...@ramalho.org>
>> escreveu:
>>> 2012/6/20 André Caribé <decocar...@gmail.com>:
>>> > Na verdade eu deveria ter falado closure, não é?
>>> > Se uma função estiver no escopo global ela poderá ser chamada através
>>> > do
>>> > console e até mesmo sobrescrita.
>>> > No exemplo 1 a função está aberta. No exemplo 2 ela é anônima e por
>>> > tanto só
>>> > pode ser acessada dentro do escopo em que ela foi criada.
>>> > Exemplo 2
>>> > // Script:
>>> > (function () {
>>> > var foo = function (param) {
>>> > console.log(param);
>>> > };
>>> > foo('foo() dentro do escopo');
>>> > })();
>>> > foo('foo() fora do escopo');
>>> > // Console:
>>> > "foo() dentro do escopo"
>>> > Uncaught ReferenceError: foo is not defined (anonymous function) >
>>> > foo('mais
>>> > um teste');
>>> > ReferenceError: foo is not defined
>>> É por aí, André. Infelizmente existem muitos mitos e confusões ligadas
>>> ao tema das funções em JavaScript.
>>> A questão não tem nada a ver com o fato de a função ser anônima ou ter
>>> nome, e sim com a forma de sua declaração, se ela é declarada com a
>>> instrução function (function statement) ou na forma de uma expressão
>>> função. Acontece que muitas pessoas confundem "função anônima" com
>>> "expressão função".
>>> Veja estes exemplos:
>>> (function bloco () {
>>> function f (arg) {
>>> console.log(arg);
>>> };
>>> var g = function (arg) {
>>> console.log(arg);
>>> };
>>> var h = function hugo (arg) {
>>> console.log(arg);
>>> };
>>> });
>>> f('bla');
>>> A função f foi declarada em uma instrução function. Essa instrução
>>> "iça" a função para o escopo global (em inglês: içar == hoist), e ela
>>> pode ser acessada fora do bloco, como vemos na última linha.
>>> As funções g e h foram declarada em expressões. Nestes casos não
>>> acontece o içamento (hoisting) e as funções g e h só podem ser
>>> acessada no escopo local da função bloco. Note que a função h não é
>>> uma função anônima, ela se chama hugo (isso é útil para depuração;
>>> especialmente se a função chamada hugo for vinculada a uma variável de
>>> mesmo nome ;-).
>>> Finalmente, a função bloco é uma função com nome (ela se chama bloco)
>>> mas foi definida em uma expressão (este é o motivo de usar parêntesis
>>> em torno da definição da função; sem os parêntesis seria uma instrução
>>> function).
>>> Resumindo, o içamento para o escopo global acontece sempre que a
>>> função é definida em uma instrução function, e nunca quando ela é
>>> definida em uma expressão, independente de ser ou não uma função
>>> anônima. É por causa dessa confusão com a instrução function que o
>>> Douglas Crockford recomenda nunca usar esta forma, mas sempre definir
>>> funções em expressões.
>>> [ ]s
>>> Luciano
>>> --
>>> Luciano Ramalho
>>> NOVO TWITTER: @ramalhoorg