Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: mise 15. 06. 2012, 17:01:43
-
Jak mohu jednoduše předávat data mezi aplikací a php? Nebo jaké jsou v linuxu možnosti? Dík
serial port - aplikace - ? - php (webserver) ...
-
Asi pomocí nějakých GET nebo POST požadavků. Ale záleží, co je to za data, kolik jich je, jak často je potřeba je předávat a co se s nimi na druhé straně bude dělat.
-
Asi pomocí nějakých GET nebo POST požadavků. Ale záleží, co je to za data, kolik jich je, jak často je potřeba je předávat a co se s nimi na druhé straně bude dělat.
Toto ma napadlo ako prvé. Skôr si myslím, že dotyčný chce v php spustiť externú aplikáciu, ktorá komunikuje so sériovým portom. Na to existuje http://php.net/manual/en/function.exec.php (http://php.net/manual/en/function.exec.php)
Pokiaľ má niečo komunikovať so sériovým portom, asi by to mohol byť daemon alebo cron, ktorý berie požiadavky a ukladá výsledky cez databázu, prípadne file, ale asi lepšia by bola komunikácia cez socket.
-
Ano, aplikace neustále komunikuje se zařízením přes sériový port a zpracovává data. Vím, že jde udělat sériovou komunikaci přímo v php, ale aplikace je psaná v C a má dost složitý protokol. Musel bych také neustále načítat data v php. Ale o to nejde. Nevím, co bude lepší, jestli předávat data přes soubor nebo socket? Databáze je pro mě moc složitá (ale asi se jí nevyhnu). Webserver bude fungovat jako grafické rozhraní pro diagnostiku. Nebude to tolik dat, půjde jen o několik html stránek, ale při změně dat refresh bude pomocí ajaxu.
-
co treba pres databazi? neco podobneho resim, céčková aplikace pise neco do DB, phpkovy webUI to tam najde.
-
... Databáze je pro mě moc složitá (ale asi se jí nevyhnu). Webserver bude fungovat jako grafické rozhraní pro diagnostiku. Nebude to tolik dat, půjde jen o několik html stránek, ale při změně dat refresh bude pomocí ajaxu.
Co je na databázi složitého? Pomocí databáze se naopak aplikace velmi zjednodušuje, protože hromadu problémů si vyřeší sama. Řešit ACID jiným způsobem je dnes prostě krok zpět. Jediným problémem bude vybrat, kterou DB na ten účel použít, ale podle popisu vyhoví skoro všechny běžně dostupné.
Navíc taková DB dokáže ze získaných dat provádět různé agregace, filtry, řazení,... Tím se aplikace výrazně zjednoduší.
-
Dík za nakopnutí. Databáze asi bude opravdu rozumnější, stejně ji budu muset použít. Její velikost mi teď vychází na cca 100 x (proměnná, jména, popis a možná přibude další). Ale bojím se toho, že některé hodnoty se budou hodně často měnit, abych to pak rozumně zobrazoval v prohlížeči. Pak také nevím, zda nebude problém, aby k ní přistupoval program i php?
-
Ale bojím se toho, že některé hodnoty se budou hodně často měnit, abych to pak rozumně zobrazoval v prohlížeči. Pak také nevím, zda nebude problém, aby k ní přistupoval program i php?
Právě na tohle jsou databáze stavěny. Kolik tisíc změn za sekundu budeš dělat?
-
Kolik tisíc změn za sekundu budeš dělat?
Tolik hodnot to nebude, ani když použiju realtime graf 3-10 hodnot měnící se 10x za vteřinu. Vlastně mi ani nevadí zpoždění, protože jde jen o zobrazení, hlavní aplikace mi tyto hodnoty bude stejně ukládat.
-
Kolik tisíc změn za sekundu budeš dělat?
Tolik hodnot to nebude, ani když použiju realtime graf 3-10 hodnot měnící se 10x za vteřinu. Vlastně mi ani nevadí zpoždění, protože jde jen o zobrazení, hlavní aplikace mi tyto hodnoty bude stejně ukládat.
Možná ti bude vyhovovat databáze Redis. Ovšem i MySQL si s tím poradí.
-
jak bylo receno vys: neber to tak, ze se ji "nevyhnes", ale ze je to nejlepsi mozna cesta. Pokud pouzijes neco relativne normalniho(mysql, pgsql, sqlite) tak hotovy connector najdes v podstate kazdem jazyku/frameworku. Budes naprosto jednoduse a TRANSPARENTNE zapisovat nekam(a vubec nemusis resit jak) a na druhy strane zase budes jednoduse cist. Teoreticky by tvoje aplikace treba mohla poskytovat nejakym zpusobem xml apod, ale rozhodne by to trvalo dele zprovoznit a vyladit. Na DB nemas co poradne ladit, ty jmenovane jsou tady desitky let.
Proste si udelas html soubor jako zobrazovatko s AJAX aktualizaci + JS na zpracovani dat. Na pozadi budes volat php skript ktery ti bude posilat XML. Naprosto elegantni reseni.
-
Jojo díky, použiju databázi, ta bude nejlepší.
-
Čau, předchozí příspěvky jsem nečetl. K tématu. POST request může mít libovolnou velikost, takže klidně můžeš předat jako body requestu třeba xml soubor a pak si ho jednoduše načíst přes souborové funkce v php ( php://input).
-
Čau, předchozí příspěvky jsem nečetl. K tématu. POST request může mít libovolnou velikost, takže klidně můžeš předat jako body requestu třeba xml soubor a pak si ho jednoduše načíst přes souborové funkce v php ( php://input).
To by znamenalo předávat data z aplikace do DB nikoli přímo, ale prostřednictvím Apache a PHP. Bude to trochu pomalejší, ale fungovat to bude.
-
Čau, předchozí příspěvky jsem nečetl. K tématu. POST request může mít libovolnou velikost, takže klidně můžeš předat jako body requestu třeba xml soubor a pak si ho jednoduše načíst přes souborové funkce v php ( php://input).
Tuhle možnost bych zvážil, pokud by to mělo běhat i na windows. Tam nevím, jak bych se jinak napojil z aplikace na databázi. Buď xml nebo jako klient přes socket (pokud bych použil např. balík wamp server s apachem)?
-
Zkus se mrknout na ICE - http://www.zeroc.com/
The Internet Communications Engine (Ice) is a modern distributed computing platform with support for C++, .NET, Java, Python, Objective-C, Ruby, PHP, and ActionScript. Ice is used in mission-critical projects by companies all over the world.
dá se to použít i pro vytvoření multiplatformní komunikace mezi aplikacemi pokud potřebuješ RPC (remote procedure call) a není to až tak složité, viz. demo:
http://www.zeroc.com/programmingModel.html
1. uděláš definici rozhraní ve Slice (trochu jako UML v COM):
// File example.ice
module Example
{
interface Converter
{
string toUpper(string s);
};
};
2. proženeš softíkem, třeba slice2cs, vypadnou ti zdrojáky a nějaký bordel okolo - slice2cs example.slice
3. napíšeš kód klienta
using Example;
public class Client
{
public static void Main(string[] args)
{
try
{
Ice.Communicator communicator = Ice.Util.initialize();
ConverterPrx cvt = ConverterPrxHelper.checkedCast(
communicator.stringToProxy("converter:tcp -p 10000 -h host.domain.com"));
string upper = cvt.toUpper("hello world");
System.Console.WriteLine("Server returned: " + upper);
communicator.destroy();
}
catch(System.Exception ex)
{
System.Console.Error.WriteLine(ex);
System.Environment.Exit(1);
}
}
}
a zkompiluješ csc /r:Ice.dll /lib:c:\Ice-3.3.1\bin client.cs example.cs
4. napíšeš kód serveru
public class ConverterI : Example.ConverterDisp_
{
public override string toUpper(string s, Ice.Current c)
{
return s.ToUpper();
}
}
public class Server
{
public static void Main(string[] args)
{
try
{
Ice.Communicator communicator = Ice.Util.initialize();
Ice.ObjectAdapter adapter = communicator.createObjectAdapterWithEndpoints(
"converter", "tcp -p 10000");
adapter.add(new ConverterI(), communicator.stringToIdentity("converter"));
adapter.activate();
communicator.waitForShutdown();
communicator.destroy();
}
catch(System.Exception ex)
{
System.Console.Error.WriteLine(ex);
System.Environment.Exit(1);
}
}
}
a zkompiluješ csc /r:Ice.dll /lib:c:\Ice-3.3.1\bin server.cs example.cs
5. spustíš server a pak client, server vrátí HELLO WORLD
Výhodou by mělo být že je podporováno docela dost jazyků a je to multiplatformní, mě osobně to zaujalo jako možné řešení jak napsat multiplatformně pluginy třeba v pythonu využívající RPC. Takže si uděláš aby aplikace která čte data byla z hlediska ICE "server" a to php bylo "klient", tedy role se prohodí.
-
Jo a je to kanón na vrabce ;)
-
Čau, předchozí příspěvky jsem nečetl. K tématu. POST request může mít libovolnou velikost, takže klidně můžeš předat jako body requestu třeba xml soubor a pak si ho jednoduše načíst přes souborové funkce v php ( php://input).
Tuhle možnost bych zvážil, pokud by to mělo běhat i na windows. Tam nevím, jak bych se jinak napojil z aplikace na databázi. Buď xml nebo jako klient přes socket (pokud bych použil např. balík wamp server s apachem)?
XML je také možnost, ale řešit SOAP na lokálním stroji při takové zátěži asi nebude to pravé ořechové. Měl jsi asi na mysli přes soubor. Aplikace by klidně mohla i vygenerovat kompletní web a normálně ho uložit jako soubor. WAMP by v tom případě nebyl nutný, pokud by nebyl potřebný vnější přístup.
Podobně by se dal využít i formát JSON, klient by by nemusel obnovovat celou stránku, ale AJAXem by jen aktualizoval data.
Napojení z aplikace např. na Redis není tak složité. Má jednoduchý protokol, na který se dá velmi rychle napsat potřebné rozhraní, ale v knihovnách je jich dostatek. Pokud umíš otevřít socket a zapsat do něj string, nepotřebuješ ani tu knihovnu.
Možností je mnoho. Některé jsou výhodnější, jiné méně. Klidně si můžeš napsat v té aplikaci vlastní webserver, který bude přímo poskytovat XML nebo HTML.
-
Jo a je to kanón na vrabce ;)
Podobny: zeromq.org
-
Aplikace by klidně mohla i vygenerovat kompletní web a normálně ho uložit jako soubor.
Nikdy by som nedovolil aplikácii, aby mala priamy prístup k rovnakým súborom, ku ktorým pristupuje apache. Zvlášť keby aplikácia obsahovala aj cudzí kód a už vôbec nie, keby tam mala pristupovať windoze aplikácia. To je akoby vykrikujem: všetkok malware a podobný bordel, poďte rýchlo sem a zaserte mi ostatný kód ..
-
Aplikace by klidně mohla i vygenerovat kompletní web a normálně ho uložit jako soubor.
Nikdy by som nedovolil aplikácii, aby mala priamy prístup k rovnakým súborom, ku ktorým pristupuje apache. Zvlášť keby aplikácia obsahovala aj cudzí kód a už vôbec nie, keby tam mala pristupovať windoze aplikácia. To je akoby vykrikujem: všetkok malware a podobný bordel, poďte rýchlo sem a zaserte mi ostatný kód ..
Stačilo dočíst odstavec. Kromě toho nebyla ani řeč o cizím kódu v aplikaci.