FAQ |
Kalender |
![]() |
#1 | |||
|
||||
Medlem
|
Tjenare,
Har en fråga för er som är mer bevandrade inom Apache (om felet ligger där). Har försökt Googla till mig en lösning men inte hittat något vettigt. "Problemet" uppträder ofta på internet, och jag är inte säker på att det är något Apache-specifikt eller om det har med hur webbläsare hanterar anslutningar mot HTTP-servrar t ex. Det jag vill kunna göra är (bland mycket annat) att kunna köra igång ett PHP-script via webbläsaren som kan ta ganska lång tid att köra, och samtidigt kunna "göra annat" mot samma webbserver i samma webbläsare. I nuläget måste exekveringen av PHP-scriptet slutföras innan en URL på samma server i en annan flik börjar laddas. Det största användningsområdet är vid exportering av rapporter (som i vissa fall tar lång tid att generera) i vårt intranät/kundcenter på Be Better Online, där man som användare inte vill bli tvingad att vänta på att genereringen skall bli klar innan man kan göra annat. Har sett samma beteende på massor av sajter, även sådana som jag vet är IIS-baserade, men jag intalar mig samtidigt att jag har varit med om att vissa sajter inte har detta beteende. Den aktuella miljön är en LAMP-installation baserad på Ubuntu Server (Karmic). |
|||
![]() |
![]() |
![]() |
#2 | |||
|
||||
Bara ett inlägg till!
|
Du bör kunna göra åtminstone ett par saker samtidigt. Enligt HTTP-standarden bör webbläsarna inte ha mer än 2 öppna anslutningar till en och samma server, men i praktiken har de flesta valt att ha 4-8 anslutningar som gräns.
Om du bara kan ha en enda så kanske det snarare är någon form av låsning på databastabellen som gör att inget annat kan göras samtidigt? Testa att starta laddningen från en dator och försök sedan nå sidan samtidigt från en annan dator. Om det inte fungerar så är det snarare databasen som är låst och övriga flikar väntar på att låset ska släppas. |
|||
![]() |
![]() |
![]() |
#3 | |||
|
||||
Medlem
|
emilv: Alright! Tack för tipset, men det rör sig inte om en låsning på någon databastabell, och det spelar ingen som helst roll vad det är för typ av innehåll jag försöker ladda utöver den aktuella väntande anslutningen. Jag kan komma åt annat innehåll om jag öppnar en annan webbläsare på samma dator, så det känns som att det har med hur webbläsaren agerar. Jag vet inte om det kan påverka att användaren är inloggad med en lagrad session-variabel, typ att webbläsaren inte hämtar någon ny sida för att inte skada sessionens integritet (låter förmodligen helsnurrigt..)..
|
|||
![]() |
![]() |
![]() |
#4 | |||
|
||||
Bara ett inlägg till!
|
Då förstår jag verkligen inte hur problemet kan uppstå. Testa att lägga genereringen på en egen subdomän (men mot samma server). Eventuella sådana blockar i webbläsaren brukar nämligen gå på domännamn, inte IP-adress. Apache har som standard inga begränsningar på hur många anslutningar en IP-adress får ha.
|
|||
![]() |
![]() |
![]() |
#5 | |||
|
||||
Medlem
|
emilv: Alright, det är ju en lösning, som jag är rätt säker på att den fungerar utan att ha testat, det löser problemet med rapportgenereringen. Jag skulle dock vilja bli av med problemet helt och hållet, sitter ofta och kodar rätt stora script som senare körs som cronjobs och kör dem gärna i webbläsaren för att debugga (kan ju köra dem via SSH, men föredrar att läsa output:en i en webbläsare med tanke på sökfunktioner etc., visst skulle jag kunna ha ett extra hostname att köra dessa mot, men det skulle verkligen vara kanon om man kunde bli av med problemet helt och hållet.
|
|||
![]() |
![]() |
![]() |
#6 | |||
|
||||
Mycket flitig postare
|
Stör mig bland annat på detta hos Double.net.
Men i alla fall, det löser inte huvudproblemet, men du skulle ju kunna skapa rapporten i bakgrunden. Typ att man klickar på en länk, ett cron job skapar rapporten och sedan blinkar du till i webbläsaren när den är klar och så kan man ladda rapporten som typ pdf, html eller vilket format som helst. Du kan ju lägga rapporten tillfälligt i en databastabell också så blir inte skillnaden så stor i användarupplevelsen. Ganska snyggt tycker jag, speciellt om man har rapporter som tar lång tid att skapa, >10 sekunder. Användaren kan då göra vad som helst i systemet medan rapporten genereras. |
|||
![]() |
![]() |
![]() |
#7 | |||
|
||||
Medlem
|
Absolut, det är en snygg lösning på problemet med rapportgenerering! Tack för tipset!
|
|||
![]() |
![]() |
![]() |
#8 | |||
|
||||
Flitig postare
|
Så här gör du:
1. Skapa en databastabell som innehåller "work-items" 2. Kör php-scriptet via system() eller dylikt med &-tecken för att lägga det i bakgrunden och längst ner i scriptet när det är klart så ändrar du din work-item till "done". Observera att du förmodligen också bör ha koll så att du inte drar igång för många work-items och således sänker servern. Under tiden så har du ett ajax-anrop (jquery) som uppdaterar och kollar work-items och visar en fin laddar-ikon till användaren. |
|||
![]() |
![]() |
![]() |
#9 | |||
|
||||
Har WN som tidsfördriv
|
I mina öron låter det som du använder sessions i din phpkod och du upplever seghet just därför.
Läs mer på php, speciellt brady:s post på http://www.php.net/manual/en/ref.session.php#64525 |
|||
![]() |
![]() |
![]() |
#10 | |||
|
||||
Medlem
|
Beklagar att jag inte svarat er tidigare!
JLE: Tack för tipset! Det är absolut en snygg lösning på rapportgenereringen! Vi kör ett liknande upplägg för vissa delar i vårt intranät där vi kör igång analyser, fast då skapar vi ett "jobb" i en MySQL-tabell och låter ett cronjob kolla av och köra igång eventuella jobb en gång i minuten. najk: Perfekt, där har vi förklaringen till felet, i nuläget körs session_start() i en fil som inkluderas överallt på intranätet, får bygga om det litet men det är inga konstigheter! Tack! |
|||
![]() |
![]() |
Svara |
|
|