Ben OrientDB ikili API için PHP için bir adaptör yazmak istiyorum.
Ama PHP çiğ Soket iletişimi ile deneyime sahip birinden yardım biraz gerekir - hatta OrientDB PHP bağlayan ilk engel geçmiş olsun gibi olamaz.
Soketli birisi deneyim bu bir göz atın eğer ben takdir ediyorum:
http://code.google.com/p/orient/issues/detail?id=126
Biz ilk engel geçmiş olsun ve aslında (bu sayfanın altındaki basitleştirilmiş örnekler - sonuna gidin lütfen) bir paket göndermek olsaydı, ben kesinlikle adaptörünü yazabilirsiniz.
Ben yaparsam Ve bu tabii ki açık kaynak olarak piyasaya olacaktır.
Kimse umut bana başlamanıza yardımcı olabilir?
Teşekkürler!
11/20/2010
PEAR'ın Net_Socket başvurulması, ben aslında ben fsockopen () kullanarak, erken teşebbüs aynı kod ve düzenli PHP akışı fonksiyonları ile sona erdi.
Hala hiçbir yerde var. Sunucu hiç tepki vermez, ve hatta bir 5 saniyelik bir zaman aşımı seti ile, komut sadece derin uyku gider ve genel PHP komut dosyası zaman sınırı aştı kadar gelmez.
İşte kod:
<?php
header('Content-type: text/plain');
error_reporting(E_ALL | E_NOTICE | E_WARNING);
$txid = 123;
$db = 'demo';
$username = 'writer';
$password = 'writer';
$packet = "\x05". # 1 byte
pack('i',$txid). # 4 bytes
pack('i',strlen($db)).$db. # string
pack('i',strlen($username)).$username. # string
pack('i',strlen($password)).$password; # string
hex_dump($packet);
$addr = '127.0.0.1';
$port = 2424;
$timeout = 5;
$errstr = '';
$errno = 0;
$socket = fsockopen($addr, $port, $errno, $errstr, $timeout);
stream_set_blocking($socket, 1);
socket_set_timeout($socket, $timeout);
var_dump($socket);
fwrite($socket, $packet);
$response = '';
while (!feof($socket))
$response .= fread($socket, 1024);
hex_dump($response);
fclose($socket);
Ve burada ben teslim ediyorum paket incelemek için kullanıyorum hex_dump () fonksiyonu bulunuyor:
<?php
function hex_dump($data, $newline="\n")
{
static $from = '';
static $to = '';
static $width = 16; # number of bytes per line
static $pad = '.'; # padding for non-visible characters
if ($from==='')
{
for ($i=0; $i<=0xFF; $i++)
{
$from .= chr($i);
$to .= ($i >= 0x20 && $i <= 0x7E) ? chr($i) : $pad;
}
}
$hex = str_split(bin2hex($data), $width*2);
$chars = str_split(strtr($data, $from, $to), $width);
$offset = 0;
foreach ($hex as $i => $line)
{
echo sprintf('%6X',$offset).' : '.implode(' ', str_split($line,2)) . ' [' . $chars[$i] . ']' . $newline;
$offset += $width;
}
}
Luca Garulli, OrientDB yazarına göre, ben teslim ediyorum paket doğru görünüyor. Yani başka bir şey yanlış olduğunu ...
Bu, bir Windows sorunu olabilir? Ben Apache altında, Windows üzerinde PHP 5.3 kullanıyorum ...