Test: sockets blocking vs. not
Normal sockets in PHP are blocking. Does using a select manually improve things for just a single socket? Note this test depends on external things, and so is fairly inaccurate.
View test history (1) Run this test again Return to test menuResult: Discarded
The test labeled "blocking" was the faster by 0.0082 seconds, (1.313% faster)
The blocking test took 0.6148 seconds.
The non-blocking test took 0.623 seconds.
Nitty-Gritty
Each test case ran 20 random code order iterations consisting of 129,234 loops for a total of 2,584,680 runs.
- Line execution difference (0.000003) milliseconds.
- Avg difference (0.409) milliseconds per 129,234 loops.
- Total difference 8.18 milliseconds for 2,584,680 loops
The iteration variablity for Code 1 was (7.1482) milliseconds and Code 2 was (7.4038) milliseconds. The lower and the closer together there values are the more accurate the results are.
Code
The first test, "blocking", was:
$fp = fsockopen('127.0.0.1', 80, $errno, $error); fwrite($fp, 'GET / HTTP/1.1' . "\r\n" . 'Host: localhost' . "\r\n\r\n"); $GLOBALS['dummy2'] = fread($fp, 100); fclose($fp);
The second test, "non-blocking", was:
$fp = fsockopen('127.0.0.1', 80, $errno, $error); stream_set_blocking($fp, false); $r = array($fp); $w = array($fp); $e = array(); if (stream_select($e, $w, $e, 2)) fwrite($fp, 'GET / HTTP/1.1' . "\r\n" . 'Host: localhost' . "\r\n\r\n"); if (stream_select($r, $e, $e, 2)) $GLOBALS['dummy2'] = fread($fp, 100); fclose($fp);