+2

Um Overview do Projeto SRM

criado por Eduardo R. Maciel em 16/08/2003 5:24pm
Comentei sobre o projeto SRM no artigo Novidades do PHP5 (Alessander Thomaz), e recebi vários emails pedindo informações sobre o projeto.

O projeto SRM que significa "Script Running Magic" ou "Script Running Machine" (nem eles se decidiram ainda), tem a intenção de resolver um dos problemas, se é que pode-se considerar como tal, do PHP que é o fato de as aplicações desenvolvidas com essa linguagem trabalharem basicamente em cima do protocolo HTTP. Como sabem, o HTTP dificulta, ou facilita dependendo da aplicação, a programação de alguns tipos de sistemas, principalmente os que necessitam de relacionamente entre os dados de uma página e outra. O PHP resolveu parte desse problema com seu sistema de cookies e sessões transparentes.

A idéia do SRM é criar o que se chama de "camada de persistência", ao utilizar um servidor (um daemon com um interpretador PHP) capaz de armazenar objetos que podem ter seus métodos e propriedades acessados posteriormente. Diferentemente da armazenagem ou serialização de objetos em sessões por exemplo.

O princípio do SRM é simples. Todo objeto "persistente" deve extender uma classe especial chamada Banana (apologia aos Java Beans) que possuí um método run(). Este método inicia um eventloop no servidor mantendo o objeto em standby até que seja necessário acessá-lo novamente.

Exemplo:

<?php
class Uptime extends Banana
{
    var $uptime;

    // constructor
    function Uptime()
    {
        // Do nothing
        $this->uptime = 'empty';
    }

    function new_uptime()
    {
        $this->uptime = `uptime`;
        $this->count++;

        return $this->uptime;
    }
}

$uptime = new Uptime();
$uptime->run();
?>

O objeto acima pode ser acessado conforme o exemplo abaixo:

<?php
// starting a connection to the SRM daemon
$srm = new SRM('localhost', 7777);
$app = new SRMApp($srm, 'Uptime');

echo $app->new_uptime();
echo $app->uptime."\n";
$app->count2 = 100;
?> 

Pode não ser um bom exemplo, mas acho que você pode imaginar algo como uma espécie de "sessão" armazenada em outro servidor e que esta sessão contém uma instância de seu objeto que pode ser acessada apartir de outros servidores. Exemplo prático: Instancie conexões a um banco de dados e controle o acesso(numero de conexões simultãneas por exemplo) através de um objeto Banana.

O SRM também traz o conceito de variáveis "a nível de aplicação" para o PHP, que são variáveis que armazenadas no daemon e podem persistir através de multiplas requisições do cliente. Estas variáveis são armazenadas num array global do SRM e podem ser acessadas diretamente da seguinte maneira:

<?php
$obj = new SRM ('localhost', 7777);
$obj->globals['var'] = $data;
$data2 = $obj->globals['var'];
?>

Além disso, o SRM traz um sistema de session handler para o PHP, assim como o 'files', 'mm' ou 'pgsql' session handlers. Basta habilitar o feature no php.ini.

Um dos problemas que vi no projeto SRM é o fato de utilizar herança para a composição de um objeto persistente. Note que o SRM ainda não suporta o novo modelo de Objetos do PHP5 e portanto não possui interfaces e que ao herdar a classe Banana, o único meio de extender seu objeto é por agregação. Claro que isso não é um problema tão grave, e imagino que será solucionado nas próximas versões.

Tenho acompanhado o desenvolvimento do SRM que alias está infelizmente praticamente parado por falta de tempo dos seus principais colaboradoes.

Bem era isso, quem quiser mais informações de uma olhada no site do projeto: http://www.vl-srm.net

Abraços,
Eduardo R. Maciel
Analista de Sistemas
Sonae Distribuição Brasil S.A.

Comentários:

Mostrando 1 - 10 de 10 comentários
Um dos grandes problemas com o SRM é a possibilidade de usar vários computadores em conjunto para servir suas páginas. Imagine que esteja fazendo um Cache no SRM, então cada máquina poderá ter um cache em diferente estado.
Ou caso queira ter uma máquina com um cache central, havera uma grande necessidade de programação extra para conseguir isso...

É uma grande ferramenta, mas tem que se tomar cuidado...

Um bom artigo em inglês explicando essas nuances, inclusive comparando Java vs PHP nesse aspecto:
http://php.weblogs.com/2003/06/16
10/09/2003 3:29am (~21 anos atrás)

Só hoje consegui ler seu artigo.
Muito bom, rápido e direto.
Parabéns, ele despertou algumas curiosidades no PHP que eu não tinha antes.

Um abraço,
Alessander
21/08/2003 2:59pm (~21 anos atrás)

Olá Leo,

você pode dar uma olhada no site do projeto: http://www.vl-srm.net e assinar as listas de discussão.
Creio que eles estão precisando de programadores C para colaborar no projeto.

Abraços,
Eduardo R. Maciel
20/08/2003 12:03pm (~21 anos atrás)

Boa tarde Lázaro,

O SRM é voltado para quem possuí necessidades que vão além do que o sistema de sessões do PHP oferece. Como expliquei, ele não um simples sistema de sessões, ele pode armazenar OBJETOS. Existem inúmeras utilidades para isso. Você pode por exemplo instanciar um objeto em um servidor, armazenar no SRM, e buscá-lo apartir de um outro servidor se necessário. Imagine uma situação onde você precisa de um SINGLETON mas tem vários servidores. O singleton seria armazenado no SRM e acessado por todos os servidores que necessitassem do recurso.

Ficou um pouco mais claro agora?

Abraços,
Eduardo R. Maciel
20/08/2003 12:01pm (~21 anos atrás)

leo genilhu disse:
gostaria de ler mais sobre este projeto e ate mesmo de como participar dele ja que esta parado , gostei muito sera de grande emportante pra nossa area ja que a cada dia grandes projetos tem migrado pra java ...
20/08/2003 9:00am (~21 anos atrás)

Qual a vantagem de eu usar um sistema como esse, hoje eu faço tudo usando sessiom meu estilo de programar e que tenho um script central que inclui os templates, assim todo template meu é uma classe extendida de outra para me ajudar na construção de querys e desenho de html/javascript; na hora da chamada eu pego meu script central (run.php) incluo o script no qual estou querendo executar alguma ação monto o objeto, vejo se no session existe uma referencia com desse objeto, se existe eu faço um forech alimentando o objeto com seus parametros antigos e o mesmo no post e no get, para que as variaveis que foram passadas façam sejam propriedades do meu objeto. então executo uma função que no geral e um desenho de tela ou o submit da mesma.

como essa classe pode me ajudar?
que problemas tem em fazer do jeito normal?(o que estou fazendo)

grande abraço e parabens pelo artigo
19/08/2003 12:41pm (~21 anos atrás)

Olá André,

Já testei sim. Funciona legal, apesar de que acho que ainda tem um longo caminho pela frente antes de se tornar "estável". E poderia incluir mais algumas funcionalidades. Mas no momento, faz o que se propõe a fazer. Uma pena que está praticamente parado mesmo.

Estou brigando para conseguir compilar contra o PHP5beta mas está dificil. Acho até que não vai funcionar. Se alguém conseguir por favor me avise.

Quanto ao prevayler, eu já li a respeito, mas nunca utilizei. Vou dar uma pesquisada a respeito.

Abraços,
Eduardo R. Maciel
18/08/2003 2:00pm (~21 anos atrás)

Oi Eduardo,

você já o testou?

Eu já tinha visto esse projeto a uns 2 meses atrás e já estava bem parado? Sabes se houve alguma novidade neste período?

Infelizmente por causa de coisas como este "simulador" de pool de conexões(a propósito, você conhece o sqlrelay, já testou?) e algumas outras coisinhas, migramos um projeto open-source grande para java. :(

Em relação a persistência de objetos, você conhece o prevayler(http://www.prevayler.org/)? Um dia espero que exista algo assim para PHP! :)

Abraços!
18/08/2003 10:55am (~21 anos atrás)

Bom dia Rafael,

Obrigado. Espero ter ajudado.

Em breve vou postar mais alguns artigos interessantes.

Abraços,
Eduardo R. Maciel
Analista de Sistemas
Sonae Distribuição Brasil S.A.
18/08/2003 8:02am (~21 anos atrás)

Prezado Eduardo,

Quero parabenizá-lo pelo seu artigo, é de grande valia para a comunidade saber de novos recursos do PHP que ajudam tanto.

Espero que iniciativas como a sua(de falar de coisas menos conhecidas no meio da comunidade PHP) sejam cada vez mais intensas e constantes aqui no PHPBrasil.com também.

Rafael Silva
Programador
17/08/2003 1:25pm (~21 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)