2011-04-19 10 views
6

के साथ मल्टी-प्रोसेस php मैं libevent के साथ एक साधारण php websocket सर्वर बनाने में सक्षम हूं, लेकिन जब मैं इसे मल्टीप्रोसेसिंग करने की कोशिश कर रहा हूं तो मैं अटक गया हूं।libevent

उदाहरण के लिए इस एकल प्रोसेसिंग

<?php 
$socket = stream_socket_server ('tcp://0.0.0.0:2000', $errno, $errstr); 
stream_set_blocking($socket, 0); 
$base = event_base_new(); 
$event = event_new(); 
event_set($event, $socket, EV_READ | EV_PERSIST, 'ev_accept', $base); 
event_base_set($event, $base); 
event_add($event); 
event_base_loop($base); 

$GLOBALS['connections'] = array(); 
$GLOBALS['buffers'] = array(); 

function ev_accept($socket, $flag, $base) { 
    static $id = 0; 

    $connection = stream_socket_accept($socket); 
    stream_set_blocking($connection, 0); 

    $id += 1; 

    $buffer = event_buffer_new($connection, 'ev_read', NULL, 'ev_error', $id); 
    event_buffer_base_set($buffer, $base); 
    event_buffer_timeout_set($buffer, 30, 30); 
    event_buffer_watermark_set($buffer, EV_READ, 0, 0xffffff); 
    event_buffer_priority_set($buffer, 10); 
    event_buffer_enable($buffer, EV_READ | EV_PERSIST); 

    // we need to save both buffer and connection outside 
    $GLOBALS['connections'][$id] = $connection; 
    $GLOBALS['buffers'][$id] = $buffer; 
} 

function ev_error($buffer, $error, $id) { 
    event_buffer_disable($GLOBALS['buffers'][$id], EV_READ | EV_WRITE); 
    event_buffer_free($GLOBALS['buffers'][$id]); 
    fclose($GLOBALS['connections'][$id]); 
    unset($GLOBALS['buffers'][$id], $GLOBALS['connections'][$id]); 
} 

function ev_read($buffer, $id) { 
    while ($read = event_buffer_read($buffer, 256)) { 
     var_dump($read); 
    } 
} 
?> 

है लेकिन जब मैं समारोह में ऐसा ev_read

 function ev_read($buffer, $id) { 
      while ($read = event_buffer_read($buffer, 256)) { 
    $pid = pcntl_fork(); 
     switch ($pid) { 
     case -1: // Error 
      die('Fork failed, your system is b0rked!'); 
      break; 
     case 0: // Child 
       event_buffer_write($buffer,"asdawdasd"); 

     exit(0); 
      break; 


      } 
    } } 

यह डेटा भेजने does not को ...

तो मैं एक कैसे कर सकते हैं मल्टीप्रोसेसिंग PHP सॉकेट सर्वर?

+0

आप नई प्रक्रियाओं को क्यों फोर्क करना चाहते हैं? यदि आप libevent का उपयोग कर रहे हैं तो एसिंक्रोनस "बहु-प्रोसेसिंग" दृष्टिकोण का प्रयास क्यों न करें? – Robin

+0

यह कैसे करें? – Deadworldisee

+0

मुझे कुछ संकेत दें, इसे php में कैसे बनाएं ... – Deadworldisee

उत्तर

5

जबकि नैनोसर्व एक उत्कृष्ट पुस्तकालय है, यह libevent का उपयोग नहीं करता है। असल में लेखक ने अपने ब्लॉग में लिखा है कि वह कुछ समय पर libosvent का उपयोग करने के लिए नैनोसर्व को परिवर्तित करना चाहते हैं। यहां उनके ब्लॉग पोस्ट देखें: http://blog.si.kz/index.php/2010/02/03/libevent-for-php

इसके बारे में 22 मई '11 को 12:19 पर एलिक्स एक्सेल द्वारा भी एक टिप्पणी है।

अपडेट: थोड़ा और शोध मुझे http://phpdaemon.net/ पर ले गया। ऐसा लगता है कि वे नेटवर्क सर्वरों का पूरा मेजबान बनाने के लिए libevent का उपयोग कर रहे हैं

+0

https://github.com/kakserpom/phpdaemon/blob/master/lib/ थ्रेड .php – Xeoncross

+0

phpdaemon.net की मृत्यु हो गई प्रतीत होती है। साइट शो डोमेन बिक्री के लिए है। – Berniev

+0

कास्परपॉम लिंक भी मर चुका है (404)। – Berniev

संबंधित मुद्दे