コード例 #1
0
ファイル: EioDriver.php プロジェクト: amphp/file
 /**
  * We have to keep a static reference of eio event streams
  * because if we don't garbage collection can unload eio's
  * underlying pipe via a system close() call before it's
  * finished and generate a SIGPIPE.
  */
 public function __construct()
 {
     if (empty(self::$stream)) {
         \eio_init();
         self::$stream = \eio_get_event_stream();
     }
     $this->callableDecrementor = function () {
         \call_user_func($this->incrementor, -1);
     };
     $this->incrementor = function ($increment) {
         switch ($increment) {
             case 1:
             case -1:
                 $this->pending += $increment;
                 break;
             default:
                 throw new FilesystemException("Invalid pending event increment; 1 or -1 required");
         }
         if ($this->pending === 0) {
             \Amp\disable($this->watcher);
         } elseif ($this->pending === 1) {
             \Amp\enable($this->watcher);
         }
     };
     $this->watcher = \Amp\onReadable(self::$stream, function () {
         while (\eio_npending()) {
             \eio_poll();
         }
     }, $options = ["enable" => false]);
 }
コード例 #2
0
ファイル: Adapter.php プロジェクト: voidcontext/filesystem
 /**
  * @param LoopInterface $loop
  * @param array $options
  */
 public function __construct(LoopInterface $loop, array $options = [])
 {
     eio_init();
     $this->loop = $loop;
     $this->fd = eio_get_event_stream();
     $this->openFlagResolver = new Eio\OpenFlagResolver();
     $this->permissionFlagResolver = new Eio\PermissionFlagResolver();
     $this->applyConfiguration($options);
 }
コード例 #3
0
ファイル: FS.php プロジェクト: ruslanchek/phpdaemon
 public static function init()
 {
     if (!(self::$supported = extension_loaded('eio'))) {
         Daemon::log('FS: missing pecl-eio, Filesystem I/O performance compromised. Consider installing pecl-eio.');
         return;
     }
     self::$fdCache = new CappedCacheStorageHits(self::$fdCacheSize);
     eio_init();
 }
コード例 #4
0
ファイル: EioPoll.php プロジェクト: sternt/filesystem
 public function listen()
 {
     if (0 === $this->requests++) {
         if ($this->poll->isFreed()) {
             \eio_init();
             $this->poll = $this->createPoll();
         }
         $this->poll->listen();
     }
 }
コード例 #5
0
ファイル: FileSystem.php プロジェクト: zenus/phpinx
 /**
  * Initialize FS driver
  * @return void
  */
 public static function init()
 {
     if (!Daemon::$config->eioenabled->value) {
         self::$supported = false;
         return;
     }
     if (!(self::$supported = Daemon::loadModuleIfAbsent('eio', self::$eioVer))) {
         Daemon::log('FS: missing pecl-eio >= ' . self::$eioVer . '. Filesystem I/O performance compromised. Consider installing pecl-eio. `pecl install http://pecl.php.net/get/eio`');
         return;
     }
     self::$fdCache = new CappedStorageHits(self::$fdCacheSize);
     eio_init();
 }
コード例 #6
0
ファイル: Filesystem.php プロジェクト: koolkode/async
 public function __construct()
 {
     if (self::$eio === null) {
         \eio_init();
         $eio = @\eio_get_event_stream();
         \stream_set_blocking($eio, false);
         \stream_set_read_buffer($eio, 0);
         self::$eio = $eio;
         self::$callback = function () {
             while (\eio_npending()) {
                 \eio_poll();
             }
         };
     }
 }
コード例 #7
0
ファイル: EioDriver.php プロジェクト: staabm/file
 public function __construct()
 {
     if (empty(self::$isEioInitialized)) {
         \eio_init();
         self::$isEioInitialized = true;
     }
     $this->stream = \eio_get_event_stream();
     $this->callableDelReq = function () {
         $this->decrementPending();
     };
     $this->internalIncrement = function () {
         $this->incrementPending();
     };
     $this->internalDecrement = function () {
         $this->decrementPending();
     };
     $this->watcher = \Amp\onReadable($this->stream, function () {
         while (\eio_npending()) {
             \eio_poll();
         }
     }, $options = ["enable" => false]);
 }