際際滷

際際滷Share a Scribd company logo
亠仄仂仆 仆舒 PHP 亳 libevent
从舒从 于仂从仂仗仂亳亰于仂亟亳亠仍仆仂亠
亳 仆舒亟亠亢仆仂亠 亠亠仆亳亠
仗 仗舒从亳亠从仂亞仂 仗亳仄亠仆亠仆亳
亠亢亟仆舒仂亟仆舒 从仂仆亠亠仆亳 于亠弍 舒亰舒弍仂亳从仂于
仂 仄 舒从亳亠?
 舒亟亳仄 ム从仂于 [Long], 从仂于仂亟亳亠仍 亞仗仗 舒亰舒弍仂从亳
 仆亟亠亶 仂仍弍亠于 [440hz], 于亠亟亳亶 舒亰舒弍仂亳从
 于亞亠仆亳亶 亟仆亳从仂于, 于亠亟亳亶 舒亰舒弍仂亳从
舒亰舒弍仂从舒 弍舒亰亠仆仂亶 MMORPG
http://chaosroad.ru/
 舒亟亳仄 ム从仂于 [Long], 从仂于仂亟亳亠仍 亞仗仗 舒亰舒弍仂从亳
 仆亟亠亶 仂仍弍亠于 [440hz], 于亠亟亳亶 舒亰舒弍仂亳从
 于亞亠仆亳亶 亟仆亳从仂于, 于亠亟亳亶 舒亰舒弍仂亳从
 舒亟亳仄 ム从仂于 [Long], 从仂于仂亟亳亠仍 亞仗仗 舒亰舒弍仂从亳
 仆亟亠亶 仂仍弍亠于 [440hz], 于亠亟亳亶 舒亰舒弍仂亳从
 于亞亠仆亳亶 亟仆亳从仂于, 于亠亟亳亶 舒亰舒弍仂亳从
弍仆舒 舒亳亠从舒
(mem)cached
舒舒 舒亳亠从舒  于从仍ム舒亠仄 亟亠仄仂仆
亠仄仂仆亳亰舒亳. 丼仂 亠 舒从仂亠 libevent?
 亠亟仂舒于仍磳 仗仂仂亶 仄亠舒仆亳亰仄 亟仍
亰舒仗从舒 callback 仆从亳亶, 仗亳 仆舒仗仍亠仆亳亳
仂仗亠亟亠仍亠仆仆仂亞仂 仂弍亳 仆舒 亟亠从亳仗仂亠:
 READ
 WRITE
 TIMEOUT
 SIGNAL
 http://www.monkey.org/~provos/libevent/
 http://ru.php.net/manual/en/intro.libevent.php
仍ム从舒仄亳 弍舒仍亠仄?
亳亠仄 亟亠仄仂仆舒, 舒弍仂舒ム亠亞仂  仂从亠仂仄
// 弌仂亰亟舒亠仄 仂从亠 - event 于亠舒亠 仆舒 亟亠从亳仗仂
$rSocket = stream_socket_server (
'tcp://127.0.0.1:666',
$errno, $errstr,
STREAM_SERVER_BIND | STREAM_SERVER_LISTEN );
// 亟舒仍亠仄 亠亞仂 仆亠 弍仍仂从亳ム亳仄, 仂 弍 仗仂亰于仂仍亳 仗亳仆亳仄舒 亟亞亳亠
从仂仆仆亠从
stream_set_blocking ( $rSocket, 0 );
亳亠仄 亟亠仄仂仆舒  仗仂亟从仍ム舒亠仄 libevent
// 仂亰亟舒亠仄 仂弍亳亶仆 弍舒亰
$rBaseEvent = event_base_new ( );
// 仂亰亟舒亠仄 仆仂于仂亠 仂弍亳亠 亟仍 仂从亠舒
$rSocketEvent = event_new ( );
/**
* 仍仂于亳仄 仂弍亳 "亠仆亳亠" 亳 仗仂仍亠
仂仗亠舒亳亳 亠仆亳 于仂亰于舒舒亠仄 仂弍亳亠
于 弍舒亰
亠仂亟 仂弍舒弍仂从亳
function onAcceptEvent ( $rSocket, $rEvent, $args ) {
global $rBaseEvent; // 亟仂弍仆亠亠 亟亠仍舒 亠亠亰 仂弍亠从 ;)
static $iConnect = 0; // 亳亟亠仆亳亳从舒仂 从仂仆亠从舒
$iConnect++;
// 亳仄亠仄 从仂仆仆亠从
$rConnection = stream_socket_accept ( $rSocket );
// 亟舒仍亠仄 从仂仆仆亠从 仆亠 弍仍仂从亳ム亳仄, 仂 弍 仗仂亰于仂仍亳 仗亳仆亳仄舒
亠亠 从仂仆仆亠从
stream_set_blocking ( $rConnection, 0 );
// 仂亰亟舒亟亳仄 弍亠 仂弍仄亠仆舒 亟舒仆仆仄亳
$buf = event_buffer_new ( $iConnect, 'onReadEvent', 'onWriteEvent',
'onFailureEvent', $iConnect);
// 仗仂亟从仍ム舒亠仄 弍亠 从 弍舒亰亠 仂弍亳亶
亠仂亟 亠仆亳
$iBufferReadLenght = 1024; // 舒亰仄亠 弍亠舒 亠仆亳
function onReadEvent($rStream, $args) {
global $iBufferReadLenght;
$tmp = '';
do {
$tmp .= event_buffer_read ( $hBuffer, $this->iBufferReadLenght );
if( $iBufferReadLenght > strlen($tmp) ) {
break;
}
} while ( true );
return $tmp;
亠亞从亳仄 亟于亳亢亠仆亳亠仄 从亳,
仗亠于舒舒亠仄 亟亠仄仂仆舒 于 ...
丐舒亶仄亠
弌舒仆亟舒仆亶 舒亶仄亠 libevent'舒 丕
舒弍仂舒亠 :) (thx Tony2001)
 仂 于仂亟 亠, 亟舒亢亠 于 束仗仍仂仂仄損
舒从仍舒亟亠!
 仂弍亳亠 仄仂亢仆仂 仗仂于亠亳
仆舒 束仍ミ頴笑溝 亟亠从亳仗仂
 event_add ( resource $event,
int $timeout )
舒亳
http://cyberdot.ru/src/socket.phps
仂亟于仂亟仆亠 从舒仄仆亳
 亠仆 仄舒仍仂 亳仆仂仄舒亳亳 亳
仗亳仄亠仂于
 弌仍亠亟亳 亰舒 亠舒仄亳, 仆亠
亰舒弍于舒亠仄 亳 仂于仂弍仂亢亟舒
 丱亳仂亳 仗亳 亠仆亳亳 亟舒仆仆,
仗亠于舒ム亳 舒亰仄亠 弍亠舒
 仂亟仆 亟舒仆仆  仄仆仂亞仂 亳 仂仆亳
弍于舒ム 束亢亳亠損 :)
 仂弍仍亠仄  仂仍亠亢亳于舒仆亳亠仄
亳亞仆舒仍仂于 (EV_SIGNAL)  丕
亠亠仆 (thx Tony2001)
 亠亟仍仂从亳 于 仍舒亠 仂弍亠仆亳
仄亠亢亟 亟亠仄仂仆舒仄亳
DeadLock
DeadLock
亳亳仆 于仂亰仆亳从仆仂于亠仆亳
弌舒仄仂亠 仆亠仗亳仆仂亠  仂仍从仆
仂仍从仂 仗仂亟 仆舒亞亰从仂亶
Users Combats
Update User A
Create User A
DeadLock
亠仂亟 弍仂弍
 亠仂亞舒仆亳亰舒亳 仗亳仍仂亢亠仆亳
 个仂从 仗仂亠仂于
 丕舒仆亠仆亳亠 舒亳仆仂仆仆仂亳 
于于亠亟亠仆亳亠 弍仍仂从亳仂于仂从
DeadLock
丕舒仆磳仄 舒亳仆仂仆仆仂
Users CombatsLOCK
Create User A
Update User A
舒亠仄 仆舒亞亰从
丐亠亳仂于舒仆亳亠 弍仂舒仄亳
仄亳亳亠仄  仗仂仍亰仂于舒亠仍亠亶 于
on-line:
 仂仗仂仍亰仂于舒仍亳 API
 舒仗亳舒仍亳 仗亳仍仂亢亠仆亳亠,
亞亠仆亠亳ム亠亠 弍仂仂于
亠亰仍舒
弌亠于亠 Xeon 82.66GHz, RAM 8Gb:
 从仂仍仂 2.5  亰舒仗仂仂于 于 亠从仆亟 (仆亠 Hello, World)
 舒 1 仗仂仍亰仂于舒亠仍 于 online 舒仂亟亠 仂从仂仍仂 1.5弍 仗舒仄亳
 舒仄 仆亠 束亠亠損 (亠仍亳 仂亞仂 仆亠 亰舒仂亠 舒亰舒弍仂亳从)
弌仂于亠
 舒亳亠 束仄仍亳 仗舒舒仍仍亠仍仆仂損
 仂亠 仆亠 亰舒于亠舒亠
 丼亢亳亠 亟舒仆仆亠
 亳仆仂仆仆亠 亠亢亳仄
 丼亳舒亶亠 亳仂亟仆亳从亳  于 仆亳 仄仆仂亞仂 仗仂仍亠亰仆仂亞仂
 仍亳 亟亠仄仂仆 弍亟亠 仆亠 仂亟亳仆  仆舒仗亳亳亠
仗仂亠仆从亳亶 亠亶仄于仂从
 仂从仄亠仆亳亶亠 从仂亟 + 仗仂仂从仂仍
于亰舒亳仄仂亟亠亶于亳
 舒仗亳亳亠 仂仂亳亶 仍仂亞亞亠 - 弍亠亰 仆亠亞仂
仂仍舒亢亳于舒 仗亳仍仂亢亠仆亳亠 弍亟亠 仍仂亢仆仂
 弌亟亠仍舒亶亠 仆亠从仂仍从仂 仂于仆亠亶
仍仂亞亞亳仂于舒仆亳
于仂亟
 仂亢仆仂 亠从仂仄亠仆亟仂于舒 从 亳仗仂仍亰仂于舒仆亳 仆舒
仗仂亟舒从亠仆亠
 仂亰于仂仍磳 亟亠亢舒 仂仂亳亠 仆舒亞亰从亳 (仗亳
仂仄 仂舒于仍 LA 于 舒亰仄仆 仗亠亟亠仍舒 )
 丐亠弍亠 丼亂 舒从从舒仆仂亶 舒弍仂
仂仗仂?
long13@gmail.com
Skype: v.kruchkov
http://l-o-n-g.livejournal.com/

More Related Content

PHP libevent Daemons. A high performance and reliable solution. Practical experience

  • 1. 亠仄仂仆 仆舒 PHP 亳 libevent 从舒从 于仂从仂仗仂亳亰于仂亟亳亠仍仆仂亠 亳 仆舒亟亠亢仆仂亠 亠亠仆亳亠 仗 仗舒从亳亠从仂亞仂 仗亳仄亠仆亠仆亳 亠亢亟仆舒仂亟仆舒 从仂仆亠亠仆亳 于亠弍 舒亰舒弍仂亳从仂于
  • 2. 仂 仄 舒从亳亠? 舒亟亳仄 ム从仂于 [Long], 从仂于仂亟亳亠仍 亞仗仗 舒亰舒弍仂从亳 仆亟亠亶 仂仍弍亠于 [440hz], 于亠亟亳亶 舒亰舒弍仂亳从 于亞亠仆亳亶 亟仆亳从仂于, 于亠亟亳亶 舒亰舒弍仂亳从 舒亰舒弍仂从舒 弍舒亰亠仆仂亶 MMORPG http://chaosroad.ru/ 舒亟亳仄 ム从仂于 [Long], 从仂于仂亟亳亠仍 亞仗仗 舒亰舒弍仂从亳 仆亟亠亶 仂仍弍亠于 [440hz], 于亠亟亳亶 舒亰舒弍仂亳从 于亞亠仆亳亶 亟仆亳从仂于, 于亠亟亳亶 舒亰舒弍仂亳从 舒亟亳仄 ム从仂于 [Long], 从仂于仂亟亳亠仍 亞仗仗 舒亰舒弍仂从亳 仆亟亠亶 仂仍弍亠于 [440hz], 于亠亟亳亶 舒亰舒弍仂亳从 于亞亠仆亳亶 亟仆亳从仂于, 于亠亟亳亶 舒亰舒弍仂亳从
  • 4. 舒舒 舒亳亠从舒 于从仍ム舒亠仄 亟亠仄仂仆
  • 5. 亠仄仂仆亳亰舒亳. 丼仂 亠 舒从仂亠 libevent? 亠亟仂舒于仍磳 仗仂仂亶 仄亠舒仆亳亰仄 亟仍 亰舒仗从舒 callback 仆从亳亶, 仗亳 仆舒仗仍亠仆亳亳 仂仗亠亟亠仍亠仆仆仂亞仂 仂弍亳 仆舒 亟亠从亳仗仂亠: READ WRITE TIMEOUT SIGNAL http://www.monkey.org/~provos/libevent/ http://ru.php.net/manual/en/intro.libevent.php
  • 7. 亳亠仄 亟亠仄仂仆舒, 舒弍仂舒ム亠亞仂 仂从亠仂仄 // 弌仂亰亟舒亠仄 仂从亠 - event 于亠舒亠 仆舒 亟亠从亳仗仂 $rSocket = stream_socket_server ( 'tcp://127.0.0.1:666', $errno, $errstr, STREAM_SERVER_BIND | STREAM_SERVER_LISTEN ); // 亟舒仍亠仄 亠亞仂 仆亠 弍仍仂从亳ム亳仄, 仂 弍 仗仂亰于仂仍亳 仗亳仆亳仄舒 亟亞亳亠 从仂仆仆亠从 stream_set_blocking ( $rSocket, 0 );
  • 8. 亳亠仄 亟亠仄仂仆舒 仗仂亟从仍ム舒亠仄 libevent // 仂亰亟舒亠仄 仂弍亳亶仆 弍舒亰 $rBaseEvent = event_base_new ( ); // 仂亰亟舒亠仄 仆仂于仂亠 仂弍亳亠 亟仍 仂从亠舒 $rSocketEvent = event_new ( ); /** * 仍仂于亳仄 仂弍亳 "亠仆亳亠" 亳 仗仂仍亠 仂仗亠舒亳亳 亠仆亳 于仂亰于舒舒亠仄 仂弍亳亠 于 弍舒亰
  • 9. 亠仂亟 仂弍舒弍仂从亳 function onAcceptEvent ( $rSocket, $rEvent, $args ) { global $rBaseEvent; // 亟仂弍仆亠亠 亟亠仍舒 亠亠亰 仂弍亠从 ;) static $iConnect = 0; // 亳亟亠仆亳亳从舒仂 从仂仆亠从舒 $iConnect++; // 亳仄亠仄 从仂仆仆亠从 $rConnection = stream_socket_accept ( $rSocket ); // 亟舒仍亠仄 从仂仆仆亠从 仆亠 弍仍仂从亳ム亳仄, 仂 弍 仗仂亰于仂仍亳 仗亳仆亳仄舒 亠亠 从仂仆仆亠从 stream_set_blocking ( $rConnection, 0 ); // 仂亰亟舒亟亳仄 弍亠 仂弍仄亠仆舒 亟舒仆仆仄亳 $buf = event_buffer_new ( $iConnect, 'onReadEvent', 'onWriteEvent', 'onFailureEvent', $iConnect); // 仗仂亟从仍ム舒亠仄 弍亠 从 弍舒亰亠 仂弍亳亶
  • 10. 亠仂亟 亠仆亳 $iBufferReadLenght = 1024; // 舒亰仄亠 弍亠舒 亠仆亳 function onReadEvent($rStream, $args) { global $iBufferReadLenght; $tmp = ''; do { $tmp .= event_buffer_read ( $hBuffer, $this->iBufferReadLenght ); if( $iBufferReadLenght > strlen($tmp) ) { break; } } while ( true ); return $tmp;
  • 12. 丐舒亶仄亠 弌舒仆亟舒仆亶 舒亶仄亠 libevent'舒 丕 舒弍仂舒亠 :) (thx Tony2001) 仂 于仂亟 亠, 亟舒亢亠 于 束仗仍仂仂仄損 舒从仍舒亟亠! 仂弍亳亠 仄仂亢仆仂 仗仂于亠亳 仆舒 束仍ミ頴笑溝 亟亠从亳仗仂 event_add ( resource $event, int $timeout )
  • 14. 仂亟于仂亟仆亠 从舒仄仆亳 亠仆 仄舒仍仂 亳仆仂仄舒亳亳 亳 仗亳仄亠仂于 弌仍亠亟亳 亰舒 亠舒仄亳, 仆亠 亰舒弍于舒亠仄 亳 仂于仂弍仂亢亟舒 丱亳仂亳 仗亳 亠仆亳亳 亟舒仆仆, 仗亠于舒ム亳 舒亰仄亠 弍亠舒 仂亟仆 亟舒仆仆 仄仆仂亞仂 亳 仂仆亳 弍于舒ム 束亢亳亠損 :) 仂弍仍亠仄 仂仍亠亢亳于舒仆亳亠仄 亳亞仆舒仍仂于 (EV_SIGNAL) 丕 亠亠仆 (thx Tony2001) 亠亟仍仂从亳 于 仍舒亠 仂弍亠仆亳 仄亠亢亟 亟亠仄仂仆舒仄亳
  • 16. DeadLock 亳亳仆 于仂亰仆亳从仆仂于亠仆亳 弌舒仄仂亠 仆亠仗亳仆仂亠 仂仍从仆 仂仍从仂 仗仂亟 仆舒亞亰从仂亶 Users Combats Update User A Create User A
  • 17. DeadLock 亠仂亟 弍仂弍 亠仂亞舒仆亳亰舒亳 仗亳仍仂亢亠仆亳 个仂从 仗仂亠仂于 丕舒仆亠仆亳亠 舒亳仆仂仆仆仂亳 于于亠亟亠仆亳亠 弍仍仂从亳仂于仂从
  • 20. 丐亠亳仂于舒仆亳亠 弍仂舒仄亳 仄亳亳亠仄 仗仂仍亰仂于舒亠仍亠亶 于 on-line: 仂仗仂仍亰仂于舒仍亳 API 舒仗亳舒仍亳 仗亳仍仂亢亠仆亳亠, 亞亠仆亠亳ム亠亠 弍仂仂于
  • 21. 亠亰仍舒 弌亠于亠 Xeon 82.66GHz, RAM 8Gb: 从仂仍仂 2.5 亰舒仗仂仂于 于 亠从仆亟 (仆亠 Hello, World) 舒 1 仗仂仍亰仂于舒亠仍 于 online 舒仂亟亠 仂从仂仍仂 1.5弍 仗舒仄亳 舒仄 仆亠 束亠亠損 (亠仍亳 仂亞仂 仆亠 亰舒仂亠 舒亰舒弍仂亳从)
  • 22. 弌仂于亠 舒亳亠 束仄仍亳 仗舒舒仍仍亠仍仆仂損 仂亠 仆亠 亰舒于亠舒亠 丼亢亳亠 亟舒仆仆亠 亳仆仂仆仆亠 亠亢亳仄 丼亳舒亶亠 亳仂亟仆亳从亳 于 仆亳 仄仆仂亞仂 仗仂仍亠亰仆仂亞仂 仍亳 亟亠仄仂仆 弍亟亠 仆亠 仂亟亳仆 仆舒仗亳亳亠 仗仂亠仆从亳亶 亠亶仄于仂从 仂从仄亠仆亳亶亠 从仂亟 + 仗仂仂从仂仍 于亰舒亳仄仂亟亠亶于亳 舒仗亳亳亠 仂仂亳亶 仍仂亞亞亠 - 弍亠亰 仆亠亞仂 仂仍舒亢亳于舒 仗亳仍仂亢亠仆亳亠 弍亟亠 仍仂亢仆仂 弌亟亠仍舒亶亠 仆亠从仂仍从仂 仂于仆亠亶 仍仂亞亞亳仂于舒仆亳
  • 23. 于仂亟 仂亢仆仂 亠从仂仄亠仆亟仂于舒 从 亳仗仂仍亰仂于舒仆亳 仆舒 仗仂亟舒从亠仆亠 仂亰于仂仍磳 亟亠亢舒 仂仂亳亠 仆舒亞亰从亳 (仗亳 仂仄 仂舒于仍 LA 于 舒亰仄仆 仗亠亟亠仍舒 ) 丐亠弍亠 丼亂 舒从从舒仆仂亶 舒弍仂