Avatar billede jakobdo Ekspert
15. februar 2013 - 10:01 Der er 6 kommentarer og
1 løsning

Mysqli singleton men mod flere hosts

Hej,
jeg har en lidt speciel løsning, hvor jeg skal snakke med 4 forskellige databaser på 4 forskellige servere.

Min tanke er noget ala:

Når jeg skal snakke med host1
$db = $db->getinstance("host1");

Når jeg skal snakke med host2
$db = $db->getinstance("host2");

osv..
Men samtidig vil jeg jo gerne have, at når jeg skal snakke med host1 igen, så kan jeg kalde:

$db = $db->getinstance("host1");
Hvor den så ikke skal lave en reconnect og blot bruge den forbindelse fra tidligere i koden.

Nogle inputs?
Avatar billede jakobdo Ekspert
15. februar 2013 - 10:14 #1
Jeg læser netop at singleton er "overvurderet" så lukker bare spørgsmålet igen og laver et par forbindelser.
Avatar billede jakobdo Ekspert
15. februar 2013 - 10:14 #2
Lukker
Avatar billede arne_v Ekspert
15. februar 2013 - 12:26 #3
Singleton er ikke paa mode idag. Men kritikken er tit lidt overdreven.

Imidlertid er singleton nok mindre relevant i PHP end i ASP.NET og Java EE p.g.a. PHP's anderledes eksekverings model.

En singleton i PHP vil kun have request scope, mens den i ASP.NET og Java EE vil have application scope. Det er en ret stor semantisk forskel.

Ideen med at genbruge dine connections er f.in nok.

Om du bruger:
- singleton for at lave det lidt mere OO og type safe
eller:
- globale variable
er nok ikke saa vigtigt.
Avatar billede jakobdo Ekspert
15. februar 2013 - 13:03 #4
Tak for info arne_v, det blev også bare en "global" variable løsning. Noget hack, men det virker. :o)
Avatar billede jakobdo Ekspert
20. februar 2013 - 14:12 #5
Hej Arne,
jeg var måske lidt hurtig til at lukke.

Min "problem" består i følgende:

Jeg har en boks, som også skal snakke med flere bokse via ssh.
Denne ssh forbindelse er "tung" og tager Lang tid.
Tidligere gjorde jeg følgende:

$global_host1 = ssh_connect();
$global_host2 = ssh_connect();

osv...

Så den forbandt til alle hosts under opstart.
Jeg ville jo gerne væk fra denne "globale" løsning og køre noget:

$ssh = new ssh($host); når jeg skal bruge den.
Men så løber jeg ind i et problem, for når jeg skal forbinde til host1, så host2 og så host1 igen.
Så forbinder den ved hvert kald.
Omvendt synes jeg jo det er dumt at forbinde til en jeg allerede har været i kontakt med.
Kan du følge mig?

Jeg skal have et "system" som kan håndtere flere connections og bruge den gamle, hvis den findes.
Det er samme "problem" på mysql, dog er forbindelse hurtig, så der bemærker jeg det ikke på samme måde, da det er servere internt.
Avatar billede arne_v Ekspert
20. februar 2013 - 23:23 #6
$global_host1 = NULL;
...
if(is_null($global_host1)) {
    $global_host1 = ssh_connect();
}
// brug $global_host1

burde kunne bruges
Avatar billede arne_v Ekspert
20. februar 2013 - 23:24 #7
Ioevrigt koster det ogsaa lidt at connecte til MySQL.

Hvilket er grunden til at p connect eksisterer!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester