<form id="99h3p"></form>

      <em id="99h3p"></em>

                  <address id="99h3p"></address>
                  主頁 > 知識庫 > 網絡編程 > PHP >
                  欄目列表

                  PHP

                  PHP或Python調用C++實現的服務器

                  來源:互聯網 作者:PHPer 發表于:2009-09-29 11:02  點擊:
                  周末2天,一天寫了個php_cerl模塊,完成cerl的php client,一天寫了個pycerl模塊,完成cerl的python client。呵呵,C++的server可以用php或者python來調用了。 對于我們之前用CERL寫的HashServer這個服務器(一個很簡單的樣例,代碼參閱:Erlang vs. CERL -

                  周末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!\n");
                  }

                  cerl_thread_init();

                  $server = cerl_connect('localhost:8889', 'HashServer');
                  if (!$server)
                  die("ERROR: Connect HashSever failed!\n");

                  printf(
                  "+-----------------------------------------------------------\n" .
                  "| put <key> <value> - Put (key, value)\n" .
                  "| get <key> - Get value of a key\n" .
                  "| q - Quit\n" .
                  "+-----------------------------------------------------------\n");

                  for (;;)
                  {
                  echo "\n> ";
                  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]\n";
                  else
                  echo "error: $ret[0]\n";
                  }
                  else if ($cmd == 'put' || $cmd == 'p')
                  {
                  $ret = $server->call(HashSever_put, $key, $value);
                  if ($ret[0] == code_ok)
                  echo "ok!\n";
                  else
                  echo "error: $ret[0]\n";
                  }
                  else if ($cmd == 'q')
                  {
                  break;
                  }
                  else
                  {
                  echo "unknown command!\n";
                  }
                  }

                  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!\n");
                  }

                  cerl_thread_init();

                  $server = cerl_connect('localhost:8889', 'HashServer');
                  if (!$server)
                  die("ERROR: Connect HashSever failed!\n");

                  printf(
                  "+-----------------------------------------------------------\n" .
                  "| put <key> <value> - Put (key, value)\n" .
                  "| get <key> - Get value of a key\n" .
                  "| q - Quit\n" .
                  "+-----------------------------------------------------------\n");

                  for (;;)
                  {
                  echo "\n> ";
                  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]\n";
                  else
                  echo "error: $ret[0]\n";
                  }
                  else if ($cmd == 'put' || $cmd == 'p')
                  {
                  $ret = $server->call(HashSever_put, $key, $value);
                  if ($ret[0] == code_ok)
                  echo "ok!\n";
                  else
                  echo "error: $ret[0]\n";
                  }
                  else if ($cmd == 'q')
                  {
                  break;
                  }
                  else
                  {
                  echo "unknown command!\n";
                  }
                  }

                  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!"

                  有幫助
                  (0)
                  0%
                  沒幫助
                  (0)
                  0%
                  自在自线亚洲А∨天堂在线,亚洲熟妇中文字幕五十中出,亚洲熟妇AV一区