phpx/server: improve wire format
This commit updates the wire format of the phpx server. Instead of being string-based, messages sent back and forth between go and php are now base64-encoded DEFLATEd strings. This makes them a lot smaller and faster to send.
This commit is contained in:
parent
ffd9d2e695
commit
a9572e6613
4 changed files with 80 additions and 38 deletions
|
|
@ -8,6 +8,13 @@
|
|||
// It should only contain comments at the beginning of each line, and only starting with '//'.
|
||||
// See server.go.
|
||||
|
||||
// This file runs an infinite REPL-like loop.
|
||||
// It continously reads from standard input, decodes code to pass to eval(), and send the result back.
|
||||
//
|
||||
// Commands are read in DEFLATE base64 encoding (to prevent having to send too much over the wire).
|
||||
// Results are written to STDOUT back in base64 DEFLATE encoding.
|
||||
// The results are of the form [$result,$error] - $result being the actual object returned, and $error an error string.
|
||||
|
||||
// define a json_encode alias, this saves a single character!
|
||||
// (we also reuse it in the error string)
|
||||
$E = 'json_encode';
|
||||
|
|
@ -19,15 +26,11 @@ while(1) {
|
|||
// stop outputting errors when executing
|
||||
ob_start(null,0,PHP_OUTPUT_HANDLER_CLEANABLE);
|
||||
|
||||
// read the next line to get an end-of-line marker
|
||||
$m = fgets(STDIN) or exit(0);
|
||||
// read the next line (which will be code to execute)
|
||||
$b = fgets(STDIN) or exit(0);
|
||||
|
||||
// accumulate the buffer until the marker is reached
|
||||
// bail out if there is an unexpected end of input
|
||||
for($b = $l = ""; $l !== $m;) {
|
||||
$b .= $l;
|
||||
$l = fgets(STDIN) or exit(1);
|
||||
}
|
||||
// read the next command to parse
|
||||
$b = gzinflate(base64_decode($b));
|
||||
|
||||
// execute the code, and json_encode it
|
||||
try {
|
||||
|
|
@ -43,5 +46,8 @@ while(1) {
|
|||
|
||||
// and write out the result
|
||||
ob_end_clean();
|
||||
|
||||
// deflate and base64_encode
|
||||
$j = base64_encode(gzdeflate($j));
|
||||
fwrite(STDOUT,"$j\n");
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue