Vilken teknologi kan man bygga in socket i HTML-kod?

Permalänk

Vilken teknologi kan man bygga in socket i HTML-kod?

Söker en teknologi där man kan baka in socket i HTML-kod.
Jag har kollat på Socket.IO, men den använder sig av WebSocket, och inte vanliga Socket. Så det är helt fel teknologi för min del.

Mitt mål är att kommunicera via en hemsida till ett C-program med Socket.

Permalänk
Medlem

Ditt C program kommer troligtvis behöva använda sig av websockets

Visa signatur

I just love the fact that there is a global integer variable named 'i'. Just think, you will never need to declare your loop variable again!
To avoid collisions where a loop that uses 'i' calls another function that loops with 'i', be sure to stack 'i' and restore it when your function exits.

Permalänk
Medlem

Min uppfattning är att WebSockets har ett aningen nischat use-case där det ställs krav på hög dataöverföring till kostnad av högre komplexitet.

Om du inte har ett sådant use-case och enbart vill överföra data från serversidan till klientsidan så brukar man skriva ett API som din websida skickar HTTP-requests till. HTTP-requests skickar man vanligtvis från klientsidan mha Javascript.

Att lösa API-biten i C hör inte till vanligheterna men är inte omöjligt. Min uppfattning är att man oftast bygger vidare på en existerande webserver eftersom det är ganska bökigt att skriva en från scratch så libmicrohttpd eller Apache's httpd. API kommer med sina egna tekniker och filosofier exempelvis REST eller gRPC.

Permalänk
Medlem

Du kan inte använda vanliga sockets i en webbläsare. Inte ens med webassembly.

Det är mycket bättre att du beskriver ditt behov så kanske någon kan hjälpa dig vidare.

Permalänk
Skrivet av orp:

Min uppfattning är att WebSockets har ett aningen nischat use-case där det ställs krav på hög dataöverföring till kostnad av högre komplexitet.

Om du inte har ett sådant use-case och enbart vill överföra data från serversidan till klientsidan så brukar man skriva ett API som din websida skickar HTTP-requests till. HTTP-requests skickar man vanligtvis från klientsidan mha Javascript.

Att lösa API-biten i C hör inte till vanligheterna men är inte omöjligt. Min uppfattning är att man oftast bygger vidare på en existerande webserver eftersom det är ganska bökigt att skriva en från scratch så libmicrohttpd eller Apache's httpd. API kommer med sina egna tekniker och filosofier exempelvis REST eller gRPC.

Det är alltså en REST-api som jag måste göra?

Permalänk
Medlem
Skrivet av heretic16:

Det är alltså en REST-api som jag måste göra?

Du kan även använda gRPC. Jag föredrar gRPC nu för tiden eftersom jag tycker att det är smidigare än REST som oftast kommer med en del boilerplate(iaf när man ska implementera enl. standarder som OpenAPI). Nu har jag enbart spenderat 10 minuter på att försöka hitta ett gRPC-lib för C men jag kunde inte hitta något som aktivt underhålls. Jag vet om att gRPC har officiellt för C++ stöd och jag vet att det ska finnas Rust-stöd så om du vill testa gRPC så kanske det är smidigast att skriva en minimal Rust- eller Cpp-wrapper som bryggar genererade gRPC-kod till C. Gällande generad kod, gRPC använder sig av protobuf för API-beskrivningen och sedan genererar man boilerplatekod, mha protoc (protobuf compiler), som man sedan implementerar. Detta besparar en del tid och frustration.

Permalänk
Medlem
Skrivet av heretic16:

Det är alltså en REST-api som jag måste göra?

Du använder så klart den teknologi du vill ovanpå websocket/HTTP, som är vad webbläsaren klarar av. Notera särskilt att moderna webbläsare är tjuriga med avseende på CORS-headrar, ett problem man inte har när man testar med till exempel Postman.

På 90-talet var det vanligt att man skrev C-program på serversidan med teknologin CGI. Man hostar då sitt C-program i till exempel Apache, som sätter upp ett environment och forkar en process där C-programmet startas. C-programmet kan läsa information om hur anropet gjordes från environment, läsa indata från stdin och skriva utdata till stdout. Webbservern fixar resten.

I dagsläget finns det trevligare miljöer för serversida-webb-utveckling, varav ingen jag känner till bygger på C. Troligen är det vanligare att man använder något etablerat ramverk och anropar C-kod därifrån. Samma ideer som CGI byggde på kan ju användas i det gränssnittet.

Oavsett måste man naturligtvis vara extremt försiktig med att inte råka exekvera någon kod som bygger på användarens indata om den inte tvättats mycket, mycket noga.

Permalänk
Skrivet av KAD:

Du använder så klart den teknologi du vill ovanpå websocket/HTTP, som är vad webbläsaren klarar av. Notera särskilt att moderna webbläsare är tjuriga med avseende på CORS-headrar, ett problem man inte har när man testar med till exempel Postman.

På 90-talet var det vanligt att man skrev C-program på serversidan med teknologin CGI. Man hostar då sitt C-program i till exempel Apache, som sätter upp ett environment och forkar en process där C-programmet startas. C-programmet kan läsa information om hur anropet gjordes från environment, läsa indata från stdin och skriva utdata till stdout. Webbservern fixar resten.

I dagsläget finns det trevligare miljöer för serversida-webb-utveckling, varav ingen jag känner till bygger på C. Troligen är det vanligare att man använder något etablerat ramverk och anropar C-kod därifrån. Samma ideer som CGI byggde på kan ju användas i det gränssnittet.

Oavsett måste man naturligtvis vara extremt försiktig med att inte råka exekvera någon kod som bygger på användarens indata om den inte tvättats mycket, mycket noga.

Låt oss säga att jag ska använda mig av LwIP och köra REST. Hur kan jag göra då?

Permalänk
Medlem

Jag har ingen koll på LwIP men en snabb googling verkar antyda på att det finns httpd-stöd inbakat enl. https://www.nongnu.org/lwip/2_0_x/group__httpd.html . Det verkar dock som att du kommer vara begränsad gällande teknik-stack, enl. dokumentationen så har du tillgång till SSI och CGI(GET request only, max 16 parametrar i URLen och du måste returnera HTML-filer i CGI-responsen). Det är inte en stack som jag hade valt att använda men ger dig säkert en trevlig tidsresa till hur man arbetade på 90-talet.

Permalänk
Skrivet av orp:

Jag har ingen koll på LwIP men en snabb googling verkar antyda på att det finns httpd-stöd inbakat enl. https://www.nongnu.org/lwip/2_0_x/group__httpd.html . Det verkar dock som att du kommer vara begränsad gällande teknik-stack, enl. dokumentationen så har du tillgång till SSI och CGI(GET request only, max 16 parametrar i URLen och du måste returnera HTML-filer i CGI-responsen). Det är inte en stack som jag hade valt att använda men ger dig säkert en trevlig tidsresa till hur man arbetade på 90-talet.

CGI låter verkligen 90-tal.

Men jag har kollat upp LwIP och den har i alla fall stöd för socket. Det är viktigt. Om jag inte ska ha en hemsida, så får jag köra utan.

Men kan man inte ha Java i HTML-kod nu för tiden? Alltså .jsp filer? Med Java så kan man ha Socket!

http://www.java2s.com/Tutorial/Java/0360__JSP/CreatingClientS...

Vad tror ni?

Permalänk
Medlem
Skrivet av heretic16:

Men kan man inte ha Java i HTML-kod nu för tiden? Alltså .jsp filer? Med Java så kan man ha Socket!

Nej. JSP var ett försök av Sun att skapa en Java-liknande konkurrent till ASP, PHP, etc. Det körs endast på serversidan, ej i klienten.

Något otydligt vad du försöker göra. Vem förväntas använda hemsidan du skall skapa? Är det endast för personligt bruk kan du förstås göra en Java applet fortfarande. Du kan dock knappast förvänta dig att medelsvensson skulle vara villig att installera Java VM bara för att komma åt vad du nu vill skapa, och handlar det om en företagsapplikation så är väl där frågan om de får installera sådant för sin IT-avdelning.

Visa signatur

Mostly Harmless

Permalänk
Medlem
Skrivet av heretic16:

CGI låter verkligen 90-tal.

Men jag har kollat upp LwIP och den har i alla fall stöd för socket. Det är viktigt. Om jag inte ska ha en hemsida, så får jag köra utan.

Men kan man inte ha Java i HTML-kod nu för tiden? Alltså .jsp filer? Med Java så kan man ha Socket!

http://www.java2s.com/Tutorial/Java/0360__JSP/CreatingClientS...

Vad tror ni?

Om det är möjligt så hade det varit bra att känna till lite om förutsättningarna, varför används LwIP, är detta ett embedded projekt osv?

LwIP ligger ju i botten och kommer påverka allt som använder nätverk. JSP tror jag ställer krav på Tomcat's webbserver(väldigt osäker gällande detta) däremot så är detta lika mycket 90-tal och kommer troligen påverkas av LwIPs begränsningar.