Hejsan, jag har skrivit en proxy server och jag skulle vilja i efterhand kunna uppdatera denna eftersom.. Vilket språk/teknik använder du? Jag har inte en susning om detta, men rent logist, borde det inte gå att göra så att när du ska uppdatera så lägger det sig en "spökfil" som gör samma saker som den befintliga, sen kör den filen medans du uppdaterar den andra och när den är uppdaterad tar den över igen. När han säger att han inte vill avbryta användaren så tolkat jag det som att han inte vill stänga en socket. Sockets går inte att föra över programgränserna vilket behövs i din lösning ;) Det finns ingen bra lösning på ett sådant problem :/ Jag löste samma problem förut genom att dela upp programmet i 2 delar. En del som enbart tar hand om uppkopplingarna och en annan del som innehåller själva programmet. Hänger som sagt på vilken teknik det handlar om; i t.ex. .net finns det bättre sätt :) Råkade skicka det till fel Forum.. Jag skulle skicka det till Visual Basic Forum för det är det jag använder.. ;) Men det är juh även ett svar..En fråga.. Uppdatera ett program.
Jag vill inte att alla mina klienter som är anslutna ska förlora kontakten med det dom håller på med.
Så jag undrar hur ska jag göra för att kunna uppdatera programmet i körning?
// Mvh SimonSv: En fråga.. Uppdatera ett program.
En variant är att du skriver programmet så att programmet slutar ta emot nya anslutningar; på så vis kan du starta en ny instans fast av den uppdaterade versionen som tar emot nya anslutningar medan den gamla inte gör det.
Nackdel: Du kan inte använda samma sökväg till programmet hela tiden då exe-filen används när den ska ersättas. Dessutom kommer inte aktiva anslutningar att köras i det nya programmet
Om du kör t.ex. .net så kan du ha ett huvudprogram som sköter socketshanteringen. Sedan har du en dll som innehåller resten. Den kan laddas in dynamiskt i en egen AppDomain. Om du laddar dll:en på ett sätt som jag tror kallas Shadow så kopieras dll:en innan den exekveras vilket gör att du kan skriva över originalet. När du sedan ska uppgradera så kopierar du bara över den nya dll:en. I ditt program har du sedan lite kod som kollar om dll:en är en nyare version än den som används. Om så är fallet så skapar du en ny AppDomain till som allt nytt hamnar i. Den gamla lever kvar.
Eftersom att du skapar den nya instansen i en egen AppDomain så kan du när den gamla inte har några aktiva anslutningar längre skrota den. När du gör det så tas den gamla dll:en också bort ifrån minnet.
Fördel: Flexibelt! ;)
Nackdel: Precis som första; de aktiva anslutningarna kommer köras i gamla; endast nya kommer köras i nyaSv: En fråga.. Uppdatera ett program.
Som sagt, kan inget om det, men teoretiskt borde det väl fungera?Sv: En fråga.. Uppdatera ett program.
Sv: En fråga.. Uppdatera ett program.
Del 1 och Del 2 kommunicerar sen med varandra på något sätt (jag löste det genom winsock, vilket kanske inte är den bästa lösningen).
Exempel:
En användare ansluter till Del 1.
Del 1 skickar över alla data som den får från användaren till Del 2.
Del 2 tar hand om datan och skickar ett svar till Del 1.
Del 1 skickar vidare svaret till användaren.
(osv)
På det här sättet går det att stänga ner Del 2 och uppdatera den utan att förlora alla klienter som sitter på Del 1.
ThomasSv: En fråga.. Uppdatera ett program.
Sv: En fråga.. Uppdatera ett program.
Jag är inte så high på Visual Basic eller programmering, jag var tvungen att ha en IRC Proxy och då lärde jag mej IRC RFCn så jag skulle uppskatta om det finns en länk eller värkligen en välbeskriven lösning ;)
// Mvh Simon