PHP或Python调用C++实现的服务器


周末2天,一天写了个php_cerl模块,完成cerl的php client,一天写了个pycerl模块,完成cerl的python client。呵呵,C++的server可以用php或者python来调用了。

对于我们之前用CERL写的HashServer这个服务器(一个很简单的样例,代码参阅:Erlang vs. CERL - CERL简介),其PHP写的Client样例如下:

view plaincopy to clipboardprint?
<?php 
    define(HashSever_put, 1); 
    define(HashSever_get, 2); 
 
    if (!extension_loaded(php_cerl)) { 
        if (!dl(php_cerl. . PHP_SHLIB_SUFFIX)) 
            die("ERROR: Cannot load php_cerl library! "); 
    } 
 
    cerl_thread_init(); 
 
    $server = cerl_connect(localhost:8889, HashServer); 
    if (!$server) 
        die("ERROR: Connect HashSever failed! "); 
     
    printf( 
        "+----------------------------------------------------------- " . 
        "| put <key> <value> - Put (key, value) " . 
        "| get <key> - Get value of a key " . 
        "| q - Quit " . 
        "+----------------------------------------------------------- "); 
 
    for (;;) 
    { 
        echo " > "; 
        list($cmd, $key, $value) = fscanf(STDIN, %s%d%d); 
        if ($cmd == get || $cmd == g) 
        { 
            $ret = $server->call(HashSever_get, $key); 
            if ($ret[0] == code_ok) 
                echo "result: $ret[1] "; 
            else
                echo "error: $ret[0] "; 
        } 
        else if ($cmd == put || $cmd == p) 
        { 
            $ret = $server->call(HashSever_put, $key, $value); 
            if ($ret[0] == code_ok) 
                echo "ok! "; 
            else
                echo "error: $ret[0] "; 
        } 
        else if ($cmd == q) 
        { 
            break; 
        } 
        else
        { 
            echo "unknown command! "; 
        } 
    } 
 
    cerl_thread_term(); 
?>
<?php
 define(HashSever_put, 1);
 define(HashSever_get, 2);

 if (!extension_loaded(php_cerl)) {
  if (!dl(php_cerl. . PHP_SHLIB_SUFFIX))
   die("ERROR: Cannot load php_cerl library! ");
 }

 cerl_thread_init();

 $server = cerl_connect(localhost:8889, HashServer);
 if (!$server)
  die("ERROR: Connect HashSever failed! ");
 
 printf(
  "+----------------------------------------------------------- " .
  "| put <key> <value> - Put (key, value) " .
  "| get <key> - Get value of a key " .
  "| q - Quit " .
  "+----------------------------------------------------------- ");

 for (;;)
 {
  echo " > ";
  list($cmd, $key, $value) = fscanf(STDIN, %s%d%d);
  if ($cmd == get || $cmd == g)
  {
   $ret = $server->call(HashSever_get, $key);
   if ($ret[0] == code_ok)
    echo "result: $ret[1] ";
   else
    echo "error: $ret[0] ";
  }
  else if ($cmd == put || $cmd == p)
  {
   $ret = $server->call(HashSever_put, $key, $value);
   if ($ret[0] == code_ok)
    echo "ok! ";
   else
    echo "error: $ret[0] ";
  }
  else if ($cmd == q)
  {
   break;
  }
  else
  {
   echo "unknown command! ";
  }
 }

 cerl_thread_term();
?>
 

而Python写的Client样例如下:

view plaincopy to clipboardprint?
HashSever_put = 1
HashSever_get = 2
 
import sys, pycerl 
 
pycerl.thread_init() 
 
server = pycerl.connect("localhost:8889", "HashServer") 
if not server: 
    print "ERROR: Connect HashSever failed!" 
 

相关内容

    暂无相关文章

评论关闭