Attualmente sto usando il seguente metodo di hashing resource
s per le ricerche:Utilizzando risorse come indici di array in PHP
$foo = socket_create(...);
$bar = socket_create(...);
$map[(int)$foo] = 'foo';
$map[(int)$bar] = 'bar';
echo $map[(int)$foo]; // "foo"
è integer
lanciare l'opzione migliore per questo? In caso contrario, quale altro metodo di hashing sarebbe migliore o più efficiente? Queste ricerche verranno eseguite in una raccolta in centinaia, molte volte al secondo in un ciclo stretto (polling socket), quindi ho già escluso soluzioni basate sull'iterazione.
Edit:
Per spiegare la mia situazione un po 'meglio, la funzione socket_select()
prende array di risorse presa come riferimento e modifica di loro in modo tale che, dopo la chiamata di funzione, conterranno solo le risorse che hanno cambiato (ad esempio, pronto per essere letto da). Io uso una classe Socket
come wrapper per le risorse di socket, per rendere il mio codice più astratto e verificabili:
$socketObject = new Socket($socketResource);
Un'altra delle mie classi mantiene un elenco di tutte le risorse di socket che necessitano di essere interrogato ogni volta che chiamiamo socket_select()
:
$reads = [$socketResource1, $socketResource2, ...];
socket_select($reads, null, null, 0);
Dopo la chiamata al socket_select()
, so quale presa risorse sono cambiati, ma per fare qualcosa di significativo nel mio codice, ho bisogno di sapere quale presa oggetti quelle risorse corrispondono a . Così, ho bisogno di qualche modo per mappare le risorse di socket ai loro oggetti:
foreach ($reads as $socketResource) {
// Which socket object does $socketResource correspond to here?
// Currently, I use a solution like this:
$socketObject = $this->map[(int)$socketResource];
// Unfortunately, this behavior isn't guaranteed, so it isn't reliable...
}
In realtà non ho mai pensato di passare un array associativo a 'socket_select()'; potrebbe funzionare. Dovrò verificarlo più tardi. Seguirò e ti farò sapere. Grazie! – FtDRbwLXw6
Ho appena provato questo, e le chiavi sono mantenute attraverso la chiamata 'socket_select()', e tutto funziona alla grande. Ho accettato la tua risposta e ho iniziato una taglia (24 ore prima che io possa premiarla) perché apprezzo molto il tuo impegno e il tuo aiuto. Grazie! – FtDRbwLXw6
@drrcknlsn yay! Felice funziona. E apprezza la generosità! – Gordon