Avatar billede shemeri Praktikant
11. januar 2013 - 13:27 Der er 6 kommentarer

publish subscribe (PHP -> C#)

Hej,

Jeg har en lille program der få opdateringer fra en server med PULL.
Dette vil jeg gerne lave om på, så er det PUSH istedet. Kigget på nettet men kunne ikke finde noget.

Serveren har PHP applikation og klienten har .net C#
Hvordan kan jeg få PHP applikationen til at pushe noget til en .net C# program?

Bedst hvis det er muligt at bruge Publish/Subscribe pattern :-)

Any help appreciated :-)
Avatar billede arne_v Ekspert
11. januar 2013 - 15:01 #1
To muligheder:

1) lad C# program hoste en lille mini web server som din PHP kode saa kan kalde - der er en klasse i .NET til dette, saa det er ret nemt

2)  brug en rigtig message queue, PHP sender/publisher og C# program receiver/subscriber - jeg ved at ActiveMQ har baade PHP og .NET support

Det sidste er langt det bedste hvos der er mere end en instans af C# programmer, men at koere en message queue er saa endnu en server app.
Avatar billede shemeri Praktikant
11. januar 2013 - 15:56 #2
Tak Arne_v for svaret :-)

Forlag 1 lyder nemme, men problemet er at man skal åbne port for at får forbindelsen til den mini web server, ikke? Så den løsning desværre kræver ekstra konfiguration.

Forslag 2 er kompliceret, kræver installationer på serveren og server konfiguration, men er bedre løsning end #1.

Er der andre muligheder hvor der kræves ikke ekstra router/server konfiguration eller installation.
Avatar billede arne_v Ekspert
11. januar 2013 - 16:09 #3
Ja - PHP skal kunne connecte til den port som C# program lytter paa.

Jeg kan ikke lige umiddelbart taenke paa andre off the shelf  muligheder.
Avatar billede shemeri Praktikant
11. januar 2013 - 16:13 #4
Ja - PHP skal kunne connecte til den port som C# program lytter paa?

Hvad er det for en port? Noget jeg vælger eller?
Avatar billede arne_v Ekspert
11. januar 2013 - 16:29 #5
Det kan du selv definere.
Avatar billede arne_v Ekspert
11. januar 2013 - 16:31 #6
Kode stump:

        HttpListener srv = new HttpListener();
        srv.Prefixes.Add("http://localhost:8888/test/");
        srv.Start();
        while(true)
        {
            HttpListenerContext ctx = srv.GetContext();
            HttpListenerRequest req = ctx.Request;
            HttpListenerResponse resp = ctx.Response;
            StreamWriter sw = new StreamWriter(resp.OutputStream);
            if(req.Url.AbsolutePath == "/test/exit")
            {
                sw.WriteLine("farvel");
                sw.Close();
                break;
            }
            else if(req.Url.AbsolutePath == "/test/show")
            {
                foreach(string hdrnam in req.Headers.AllKeys)
                {
                    string hdrval = req.Headers[hdrnam];
                    sw.WriteLine(hdrnam + " = " + hdrval + "<br>");
                }
            }
            else
            {
                sw.WriteLine("ukendt kommando");
            }
            sw.Close();
        }
        srv.Stop();
        srv.Close();
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

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