conférence php québec march 20th, 2003. …©rence php québec march 20th, 2003. montreal, canada...

26
Script Running Machine Conférence PHP Québec March 20th, 2003. Montreal, Canada Derick Rethans <[email protected]>

Upload: phamhuong

Post on 12-May-2018

216 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Conférence PHP Québec March 20th, 2003. …©rence PHP Québec March 20th, 2003. Montreal, Canada Derick Rethans  Slide 1/24 Introduction March 20th,

Script Running Machine

Conférence PHP Québec

March 20th, 2003. Montreal, Canada

Derick Rethans <[email protected]>

Page 2: Conférence PHP Québec March 20th, 2003. …©rence PHP Québec March 20th, 2003. Montreal, Canada Derick Rethans  Slide 1/24 Introduction March 20th,

Slide 1/24 March 20th, 2003Introduction

o History

o SRM by exampleo Technologyo Future

- 2 -

Page 3: Conférence PHP Québec March 20th, 2003. …©rence PHP Québec March 20th, 2003. Montreal, Canada Derick Rethans  Slide 1/24 Introduction March 20th,

Slide 2/24 March 20th, 2003PHP History (1 of 12)

June 8, 1995 PHP Tools 1.0

Oct 17, 1995 PHP/FI 1.92

Mar. 16, 1996 PHP/FI 1.99k

June 16, 1997 PHP/FI 2.0b12

Oct. 29, 1997 PHP 3.0a1

Nov. 12, 1997 PHP/FI 2.0

Dec. 8, 1997 PHP 3.0b1

Jan. 9, 1998 PHP/FI 2.0.1

June 6, 1998 PHP 3.0

July 4, 1998 PHP 3.0.1

Mar. 1, 1999 PHP 3.0.7

July 19, 1999 PHP 4.0b1

Jan. 1, 2000 PHP 3.0.13

Oct. 21, 2000 PHP 3.0.18

May 22, 2000 PHP 4.0

Oct. 11, 2000 PHP 4.0.3

Apr. 30, 2001 PHP 4.0.5

June 23, 2001 PHP 4.0.6

Dec. 10, 2001 PHP 4.1.0

Dec. 26, 2001 PHP 4.1.1

Feb. 27, 2002 PHP 4.1.2

Apr. 22, 2002 PHP 4.2.0

May 13, 2002 PHP 4.2.1

July 22, 2002 PHP 4.2.2

Sep. 6, 2002 PHP 4.2.3

Dec. 27, 2002 PHP 4.3.0

Feb. 17, 2003 PHP 4.3.1

Aug. 17, 2003 PHP 5.0

- 3 -

Page 4: Conférence PHP Québec March 20th, 2003. …©rence PHP Québec March 20th, 2003. Montreal, Canada Derick Rethans  Slide 1/24 Introduction March 20th,

Slide 3/24 March 20th, 2003PHP History (2 of 12)

o Loops in early versions

o boring! let's go on with the cool stuff...

- 4 -

Page 5: Conférence PHP Québec March 20th, 2003. …©rence PHP Québec March 20th, 2003. Montreal, Canada Derick Rethans  Slide 1/24 Introduction March 20th,

Slide 4/24 March 20th, 2003The Past: Users on-line

Typical script to count the users 'online': <?php$timeoutseconds = 300;

$timestamp = time();$timeout = $timestamp - $timeoutseconds;

mysql_connect();mysql_select_db('users');

$insert = mysql_query( "INSERT INTO online VALUES ('$timestamp', '$REMOTE_ADDR', '$PHP_SELF')");

$delete = mysql_query( "DELETE FROM online WHERE timestamp < $timeout");

$result = mysql_query( "SELECT DISTINCT ip FROM online WHERE file = '$PHP_SELF'");

$users = mysql_num_rows($result);? >

- 5 -

Page 6: Conférence PHP Québec March 20th, 2003. …©rence PHP Québec March 20th, 2003. Montreal, Canada Derick Rethans  Slide 1/24 Introduction March 20th,

Slide 5/24 March 20th, 2003The Past: Users on-line

o 3! queries per page

o slowo inefficiento did I say it was slow?

- 6 -

Page 7: Conférence PHP Québec March 20th, 2003. …©rence PHP Québec March 20th, 2003. Montreal, Canada Derick Rethans  Slide 1/24 Introduction March 20th,

Slide 6/24 March 20th, 2003Persistent objects

__sleep and __wakeup:// file.class.php<?php class File { function File($filename) { $this->filename = $filename; $this->fp = fopen($filename, 'rb'); }

function seek($pos) { fseek($this->fp, $pos); }

function __sleep() { $this->pos = ftell($this->fp); return array('fp', 'pos', 'filename'); }

function __wakeup() { $this->fp = fopen($this->filename, 'rb'); fseek($this->fp, $this->pos); } }? >

- 7 -

Page 8: Conférence PHP Québec March 20th, 2003. …©rence PHP Québec March 20th, 2003. Montreal, Canada Derick Rethans  Slide 1/24 Introduction March 20th,

Slide 7/24 March 20th, 2003Persistent objects

__sleep and __wakeup example:// example1.php<?php require 'file.class.php'; session_start();

$f = new File('/etc/hosts'); $f->seek(20);

$_SESSION['f'] = $f;? >

// example2.php<?php require 'file.class.php'; session_start();

var_dump($_SESSION['f']);? >

- 8 -

Page 9: Conférence PHP Québec March 20th, 2003. …©rence PHP Québec March 20th, 2003. Montreal, Canada Derick Rethans  Slide 1/24 Introduction March 20th,

Slide 8/24 March 20th, 2003The Past: Trees

// binsearch.class.php<?php class node { var $key; var $value; var $left; var $right; }

class binsearch { var $root = NULL;

function binsearch($elements) { foreach ($elements as $key => $value) { $this->add_value($key, $value); } var_export($this->root); }

function add_value($key, $value) { $ptr = &$this->root;

while ($ptr != NULL) { if ($key < $ptr->key) { $ptr = &$ptr->left; } else { $ptr = &$ptr->right; } } $ptr = new node; $ptr->key = $key; $ptr->value = $value; $ptr->left = NULL; $ptr->right = NULL; }

function get_value($key) { $ptr = &$this->root; while ($key != $ptr->key && $ptr != NULL) { if ($key < $ptr->key) { $ptr = &$ptr->left; } else { $ptr = &$ptr->right; } } return $ptr ? $ptr->value : FALSE; } }? >

- 9 -

Page 10: Conférence PHP Québec March 20th, 2003. …©rence PHP Québec March 20th, 2003. Montreal, Canada Derick Rethans  Slide 1/24 Introduction March 20th,

Slide 9/24 March 20th, 2003The Past: Trees

<?php $elements = array ( 'jan' => 'Dorsten', 'derick' => 'Dieren', 'stig' => 'Trondheim', 'dan' => 'Baltimore', 'rasmus' => 'San Francisco', 'ilia' => 'Montreal' );

$tree =& new binsearch($elements); echo $tree->get_value('rasmus');? >

<?phpclass node { var $key = 'jan'; var $value = 'Dorsten'; var $left = class node { var $key = 'derick'; var $value = 'Dieren'; var $left = class node { var $key = 'dan'; var $value = 'Baltimore'; var $left = NULL; var $right = NULL; }; var $right = class node { var $key = 'ilia'; var $value = 'Montreal'; var $left = NULL; var $right = NULL; }; }; var $right = class node { var $key = 'stig'; var $value = 'Trondheim'; var $left = class node { var $key = 'rasmus'; var $value = 'San Francisco'; var $left = NULL; var $right = NULL; }; var $right = NULL; };}? >

- 10 -

Page 11: Conférence PHP Québec March 20th, 2003. …©rence PHP Québec March 20th, 2003. Montreal, Canada Derick Rethans  Slide 1/24 Introduction March 20th,

Slide 10/24 March 20th, 2003SRM: Script Running Machine

o Functions to work with persistent Objects

o Bridge between PHP Client and Objectso Objects run in threadso Manage persistent resources and data

- 11 -

Page 12: Conférence PHP Québec March 20th, 2003. …©rence PHP Québec March 20th, 2003. Montreal, Canada Derick Rethans  Slide 1/24 Introduction March 20th,

Slide 11/24 March 20th, 2003Bananas

o Persistent

o Like J**a beanso Compiled only once

- 12 -

Page 13: Conférence PHP Québec March 20th, 2003. …©rence PHP Québec March 20th, 2003. Montreal, Canada Derick Rethans  Slide 1/24 Introduction March 20th,

Slide 12/24 March 20th, 2003Oparrays / Opcode

o Oparrays

o Compiled codeo One for every script element

o Opcode

o Basic execution unito Two operandso One result

- 13 -

Page 14: Conférence PHP Québec March 20th, 2003. …©rence PHP Québec March 20th, 2003. Montreal, Canada Derick Rethans  Slide 1/24 Introduction March 20th,

Slide 13/24 March 20th, 2003Interaction

o With the SRM daemon

o UNIX domain socketso $srm = new SRM ('/var/srm.socket');o TCP/IP socketso $srm = new SRM ('localhost', 7777);o With Bananaso $binsearch = new SRMApp($srm, 'binsearch');o $binsearch->function('param1', 2);

- 14 -

Page 15: Conférence PHP Québec March 20th, 2003. …©rence PHP Québec March 20th, 2003. Montreal, Canada Derick Rethans  Slide 1/24 Introduction March 20th,

Slide 14/24 March 20th, 2003Protocols

SRM's support for protocols is extensible:o Native protocol: fast

o XML-RPC: easy to use from other languageso SOAP: harder to use, but widespread support

- 15 -

Page 16: Conférence PHP Québec March 20th, 2003. …©rence PHP Québec March 20th, 2003. Montreal, Canada Derick Rethans  Slide 1/24 Introduction March 20th,

Slide 15/24 March 20th, 2003Persistent Tree

<?php class node { var $key; var $value; var $left; var $right; }

class binsearch extends Banana { var $root = NULL;

function binsearch($elements) { foreach ($elements as $key => $value) { $this->add_value($key, $value); } var_export($this->root); }

function add_value($key, $value) { $ptr = &$this->root;

while ($ptr != NULL) { if ($key < $ptr->key) { $ptr = &$ptr->left; } else { $ptr = &$ptr->right; } } $ptr = new node; $ptr->key = $key; $ptr->value = $value; $ptr->left = NULL; $ptr->right = NULL; var_dump(func_get_args()); }

function get_value($key) { $ptr = &$this->root;

while ($key != $ptr->key && $ptr != NULL) { if ($key < $ptr->key) { $ptr = &$ptr->left; } else { $ptr = &$ptr->right; } } var_dump(func_get_args()); return $ptr ? $ptr->value : FALSE; }

function get_all() { var_dump(func_get_args()); return $this->root; } }

$tree =& new binsearch(array()); $tree->run();? >

- 16 -

Page 17: Conférence PHP Québec March 20th, 2003. …©rence PHP Québec March 20th, 2003. Montreal, Canada Derick Rethans  Slide 1/24 Introduction March 20th,

Slide 16/24 March 20th, 2003Persistent Tree

Adding a value to the binairy tree:<?php $s = new SRM('/tmp/srm.socket'); $t = new SRMApp($s, 'binsearch');

$t->add_value($argv[1], $argv[2]); $all = $t->get_all();

var_dump($all);? >

- 17 -

Page 18: Conférence PHP Québec March 20th, 2003. …©rence PHP Québec March 20th, 2003. Montreal, Canada Derick Rethans  Slide 1/24 Introduction March 20th,

Slide 17/24 March 20th, 2003Persistent Tree

Searching for a key in the binairy tree:<?php $s = new SRM('/tmp/srm.socket'); $t = new SRMApp($s, 'binsearch');

echo $t->get_value($argv[1])."\n";? >

- 18 -

Page 19: Conférence PHP Québec March 20th, 2003. …©rence PHP Québec March 20th, 2003. Montreal, Canada Derick Rethans  Slide 1/24 Introduction March 20th,

Slide 18/24 March 20th, 2003Parts

o Daemon

o SAPI for PHPo Extension for PHP

- 19 -

Page 20: Conférence PHP Québec March 20th, 2003. …©rence PHP Québec March 20th, 2003. Montreal, Canada Derick Rethans  Slide 1/24 Introduction March 20th,

Slide 19/24 March 20th, 2003Design diagram

- 20 -

Page 21: Conférence PHP Québec March 20th, 2003. …©rence PHP Québec March 20th, 2003. Montreal, Canada Derick Rethans  Slide 1/24 Introduction March 20th,

Slide 20/24 March 20th, 2003Future

o Periodic calling of functions

o ACLs to Bananaso Load balancing

- 21 -

Page 22: Conférence PHP Québec March 20th, 2003. …©rence PHP Québec March 20th, 2003. Montreal, Canada Derick Rethans  Slide 1/24 Introduction March 20th,

Slide 21/24 March 20th, 2003Future

o Zend Engine 2

o $obj->foo = array (1, 2, 3, 4);o echo $obj->foo[1];

- 22 -

Page 23: Conférence PHP Québec March 20th, 2003. …©rence PHP Québec March 20th, 2003. Montreal, Canada Derick Rethans  Slide 1/24 Introduction March 20th,

Slide 22/24 March 20th, 2003Questions

- 23 -

Page 24: Conférence PHP Québec March 20th, 2003. …©rence PHP Québec March 20th, 2003. Montreal, Canada Derick Rethans  Slide 1/24 Introduction March 20th,

Slide 23/24 March 20th, 2003

FIN

- 24 -

Page 25: Conférence PHP Québec March 20th, 2003. …©rence PHP Québec March 20th, 2003. Montreal, Canada Derick Rethans  Slide 1/24 Introduction March 20th,

Slide 24/24 March 20th, 2003Resources

These Slides: http://pres.derickrethans.nl/srm-montreal

SRM: http://www.vl-srm.net

PHP: http://www.php.net

- 25 -

Page 26: Conférence PHP Québec March 20th, 2003. …©rence PHP Québec March 20th, 2003. Montreal, Canada Derick Rethans  Slide 1/24 Introduction March 20th,

Index

Introduction ............................................................................................... 2PHP History (1 of 12) ................................................................................ 3PHP History (2 of 12) ................................................................................ 4The Past: Users on-line ............................................................................. 5The Past: Users on-line ............................................................................. 6Persistent objects ....................................................................................... 7Persistent objects ....................................................................................... 8The Past: Trees .......................................................................................... 9The Past: Trees .......................................................................................... 10SRM: Script Running Machine ................................................................. 11Bananas ..................................................................................................... 12Oparrays / Opcode ..................................................................................... 13Interaction .................................................................................................. 14Protocols .................................................................................................... 15Persistent Tree ........................................................................................... 16Persistent Tree ........................................................................................... 17Persistent Tree ........................................................................................... 18Parts ........................................................................................................... 19Design diagram ......................................................................................... 20Future ........................................................................................................ 21Future ........................................................................................................ 22Questions ................................................................................................... 23 .................................................................................................................. 24Resources .................................................................................................. 25