Page 1 of 1

Är Telldus APIet trådsäkert?

Posted: Fri Mar 17, 2023 9:45 am
by jeinor
Kan jag kalla på flera tdTurnOn samtidigt? Kommer anropen att köas då? Om inte, hur länge måste man vänta mellan varje anrop?

Tack på förhand!

Re: Är Telldus APIet trådsäkert?

Posted: Fri Mar 17, 2023 9:45 am
by micke.prag
Vårt api består av två delar (fr.o.m. version 2.1). En service och ett klientbibliotek. Servicen garanterar vi tråd- och processäkerhet eftersom flera applikationer ska kunna använda APIt samtidigt.
Vi garanterar inte trådsäkerhet i klientbiblioteket utan det bör du lösa själv i ditt program. En snabb koll på koden så delar dock inte två tdTurnOn() anrop samma resurser så det bör inte vara några problem att ha två anrop samtidigt.
Om du köar upp för många anrop på en gång och anropen tar tid kan du istället få problem med timeout.

Ang. väntan så kan du direkt börja med nästa anrop när första returnerar.

Re: Är Telldus APIet trådsäkert?

Posted: Fri Mar 17, 2023 9:45 am
by krambriw
Min mag-gropskänsla (kan man säga så?) är att Telldus Service svarar mycket säkrare och snabbare nu än någonsin tidigare.

Åtminstone när jag skickar kommandon från EventGhost så fungerar allting mycket bra. Jag kan sända som en tokig utan att jag ser några retries (vilket ofta förekom tidigare om man sände många kommandon snabbt efter varandra) , allting verkar köa upp sig snyggt och prydligt.

mvh Walter

Re: Är Telldus APIet trådsäkert?

Posted: Fri Mar 17, 2023 9:45 am
by jeinor
micke.prag wrote:Vårt api består av två delar (fr.o.m. version 2.1). En service och ett klientbibliotek. Servicen garanterar vi tråd- och processäkerhet eftersom flera applikationer ska kunna använda APIt samtidigt.
Vi garanterar inte trådsäkerhet i klientbiblioteket utan det bör du lösa själv i ditt program. En snabb koll på koden så delar dock inte två tdTurnOn() anrop samma resurser så det bör inte vara några problem att ha två anrop samtidigt.
Om du köar upp för många anrop på en gång och anropen tar tid kan du istället få problem med timeout.

Ang. väntan så kan du direkt börja med nästa anrop när första returnerar.
När du skriver att ert API består av två delar, vad menar du mer specifikt då? På er Trac på http://developer.telldus.se/ står det "Telldus provides two different APIs for access". Är det dessa du refererar till? Isåfall är det ena telldus-core och det andra Telldus Live? Eller menar du att telldus-core består av en service (/etc/init.d/telldusd start|stop|restart) och ett klientlib (libtelldus-core.so), och att detta bör anses trådsäkert? Vad är isåfall icke-trådsäkert? :)

Nu blev det lite förvirrat här, jag kollrar väl bort mig som vanligt...

Tack för svar!
krambriw wrote:Min mag-gropskänsla (kan man säga så?) är att Telldus Service svarar mycket säkrare och snabbare nu än någonsin tidigare.

Åtminstone när jag skickar kommandon från EventGhost så fungerar allting mycket bra. Jag kan sända som en tokig utan att jag ser några retries (vilket ofta förekom tidigare om man sände många kommandon snabbt efter varandra) , allting verkar köa upp sig snyggt och prydligt.

mvh Walter
Det du pratar om är Telldus Live? Eller?

Re: Är Telldus APIet trådsäkert?

Posted: Fri Mar 17, 2023 9:45 am
by krambriw
Det du pratar om är Telldus Live? Eller?
Nej, jag menar Telldus Service som körs under Windows så jag antar det är telldus-core

mvh

Re: Är Telldus APIet trådsäkert?

Posted: Fri Mar 17, 2023 9:45 am
by micke.prag
Jag pratar inte om Telldus Live! utan endast telldus-core (telldusd + libtelldus-core.so).

Re: Är Telldus APIet trådsäkert?

Posted: Fri Mar 17, 2023 9:45 am
by jeinor
micke.prag wrote:Jag pratar inte om Telldus Live! utan endast telldus-core (telldusd + libtelldus-core.so).
Okej, och vad är det du kallar "klientdel" som inte är trådsäker? Är det libtelldus-core.so-funktionerna (tdTurnOn, tdTurnOff, tdDim, etc)? Som jag fattat det använder libtelldus-core.so tjänsten telldusd för att exekvera kommandona, men det kan jag ha fattat fel.

Re: Är Telldus APIet trådsäkert?

Posted: Fri Mar 17, 2023 9:45 am
by micke.prag
telldusd = service som alltid är igång
libtelldus-core.so, TelldusCore.dll och TelldusCore.framework = klient som applikationer länkar mot.

Re: Är Telldus APIet trådsäkert?

Posted: Fri Mar 17, 2023 9:45 am
by jeinor
Det är uppfattat. Jag trodde att det funkade så här:

tdTurnOn()/tdDim()/etc -> libtelldus-core.so -> telldusd -> TellStick

Alltså att klientlibbet utför kommandon genom att anropa tjänsten (och att tjänsten sedan utför dem mot TellSticken). Som jag förstår dig nu går tdTurnOn() och de anropen som finns i libtelldus-core.so direkt mot TellStick:en, och telldusd är någonting annat? Hur använder jag som utvecklare telldusd?

Det om förvirrar mig är det här:
micke.prag wrote:Vårt api består av två delar (fr.o.m. version 2.1). En service och ett klientbibliotek. Servicen garanterar vi tråd- och processäkerhet eftersom flera applikationer ska kunna använda APIt samtidigt.
Det låter som att jag kan välja mellan att använda tjänsten, som är trådsäker, eller klientbiblioteket som inte är trådsäkert. Var finns dokumentation om tjänsten (jag letade på http://developer.telldus.se/, hittade inget)?

Tack för alla svar!

Re: Är Telldus APIet trådsäkert?

Posted: Fri Mar 17, 2023 9:45 am
by micke.prag
jeinor wrote:Jag trodde att det funkade så här:
tdTurnOn()/tdDim()/etc -> libtelldus-core.so -> telldusd -> TellStick
Det stämmer, det fungerar precis så.

Re: Är Telldus APIet trådsäkert?

Posted: Fri Mar 17, 2023 9:45 am
by jeinor
Okej, och libtelldus-core.so är inte trådsäkert, men tjänsten är trådsäker? Alltså, om jag i samma applikationer använder tdTurnOn() (eller motsvarande anrop) samtidigt från flera olika trådar KAN det bli problem, men flera applikationer kan var och en för sig anropa olika td-funktioner utan att det blir synkroniseringsproblem. När anropen väl anländer till tjänsten är det lungt, så att säga?

Re: Är Telldus APIet trådsäkert?

Posted: Fri Mar 17, 2023 9:45 am
by micke.prag
jeinor wrote: Alltså, om jag i samma applikationer använder tdTurnOn() (eller motsvarande anrop) samtidigt från flera olika trådar KAN det bli problem, men flera applikationer kan var och en för sig anropa olika td-funktioner utan att det blir synkroniseringsproblem.
Precis.

Dock som jag sa så delas inga resurser i ett tdTurnOn() anrop i den aktuella versionen. Så du kan anropa på. Dock är det inget vi garanterar för kommande versioner. Därav rekommenderade jag dig att bygga in eget lås.
jeinor wrote:När anropen väl anländer till tjänsten är det lungt, så att säga?
Ja, annars ska det behandlas som en bugg.