Versio

Class weghalen

Overzicht Reageren

Teun Beijers

Teun Beijers

13/08/2009 10:27:00
Quote Anchor link
Ik heb nu een script dat continu looped(een gameserver controller). Dit heeft plugins in de vorm van classes. Dus bijvoorbeeld class "player_plugin". Nu wil ik de optie maken om alle plugins opnieuw in te laden(als er bijvoorbeeld een bestand verandert is). De manier waarop ik dit wil doen is alle bestanden gewoon opnieuw includen. Maar nu geeft ie dan aan dat de class player_plugin all bestaat. Hoe fix ik dit?
 
PHP hulp

PHP hulp

24/05/2012 00:51:22
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Ivo K

Ivo K

13/08/2009 10:36:00
Quote Anchor link
ik snap je vraag niet geheel, maar ik denk dat je ongeveer dit bedoelt;

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

$class
= new Class () ;
$class->doe_iets () ;

// na het "refreshen"
unset ( $class ) ;
$class = new Class () ;
$class->doe_iets () ;

?>
 
Hipska BE

Hipska BE

13/08/2009 11:09:00
Quote Anchor link
Jij hebt een php script dat continu loopt?

Ocharme voor die server..

Ik raad je toch echt aan om een andere scripting taal daarvoor te gaan gebruiken. php is hier helemaal niet voor geschikt.
 
Jelmer rrrr

Jelmer rrrr

13/08/2009 13:32:00
Quote Anchor link
PHP kan dat prima in mijn ervaring (gebruik een PHP script als chat server, draait al iets meer dan een maand, serveert gemiddeld 100 mensen tegelijkertijd) maar je kan een class-definitie niet uit het geheugen gooien. (wat zou er met alle instanties van die class moeten gebeuren?)

Wat misschien wel zou lukken (als je tenminste Runkit geïnstalleerd hebt) is om de plugins in sandboxes te laden, en als je de plugin wilt herladen, dump je gewoon de huidige sandbox voor die plugin en initialiseer je een nieuwe. Bijkomend voordeel is dat plugins met fatal errors je script niet meer zouden moeten ombrengen.
 
Teun Beijers

Teun Beijers

13/08/2009 14:34:00
Quote Anchor link
@Ivo: nee, dat bedoel ik niet :)

@Hipska: Het loopt gewoon goed hoor ^^

@Jelmer: Ik wist helemaal niet dat je met php meerdere threads kon maken, zal er eens naar kijken. Brengt dat net als bij C# problemen mee met data uitwisselen tussen verschillende threads?

Hier is trouwens het script: http://quicktm.svn.sourceforge.net/viewvc/quicktm/
In quick.php worden de plugins ingeladen.
Gewijzigd op 01/01/1970 01:00:00 door Teun Beijers
 
Jelmer rrrr

Jelmer rrrr

13/08/2009 15:13:00
Quote Anchor link
Geen idee hoe ze dat probleem hebben opgelost. Ik denk zelf dat ze het via serialize() doen, en zo een kopie van de data in de ene thread naar de andere thread sturen. Probleem is dat je op die manier wel alleen maar "simpele" datatypen kan kopiëren, instanties van classes die gedefinieerd zijn in de sandbox maar niet in je eigen code levert __PHP_Incomplete objecten op.

Maar dat laatste is op zich ook niet zo'n ramp. Je kan je plugins afdwingen alleen bekende datatypen terug te laten geven, en je bent ervan verzekerd dat een plugin niet een object via een reference alsnog ergens kan aanpassen terwijl dat helemaal niet meer zou mogen.

edit: maar ik zit nu te speculeren, je zou het een keer moeten uitproberen.

edit2: je zou ook runkit kunnen nabootsen door een apart PHP proces te starten dat de plugin laadt, en dat via een socket-verbinding en een eigen kleine API verbinden met je hoofdproces. Als de plugin dan crasht of herladen moet worden, verlies je alleen de verbinding en kan je hem weer opnieuw starten. Het is waarschijnlijk wel redelijk inefficiënt, maar afhankelijk van wat voor taken je plugins doen is het wel iets wat op veel meer standaard PHP installaties zou werken.
Gewijzigd op 01/01/1970 01:00:00 door Jelmer rrrr
 
Teun Beijers

Teun Beijers

13/08/2009 15:23:00
Quote Anchor link
Jelmer schreef op 13.08.2009 15:13:
Geen idee hoe ze dat probleem hebben opgelost. Ik denk zelf dat ze het via serialize() doen, en zo een kopie van de data in de ene thread naar de andere thread sturen. Probleem is dat je op die manier wel alleen maar "simpele" datatypen kan kopiëren, instanties van classes die gedefinieerd zijn in de sandbox maar niet in je eigen code levert __PHP_Incomplete objecten op.

Maar dat laatste is op zich ook niet zo'n ramp. Je kan je plugins afdwingen alleen bekende datatypen terug te laten geven, en je bent ervan verzekerd dat een plugin niet een object via een reference alsnog ergens kan aanpassen terwijl dat helemaal niet meer zou mogen.

edit: maar ik zit nu te speculeren, je zou het een keer moeten uitproberen.

edit2: je zou ook runkit kunnen nabootsen door een apart PHP proces te starten dat de plugin laadt, en dat via een socket-verbinding en een eigen kleine API verbinden met je hoofdproces. Als de plugin dan crasht of herladen moet worden, verlies je alleen de verbinding en kan je hem weer opnieuw starten. Het is waarschijnlijk wel redelijk inefficiënt, maar afhankelijk van wat voor taken je plugins doen is het wel iets wat op veel meer standaard PHP installaties zou werken.


Je zegt: "geen idee hoe ze dat hebben opgelost" als je het over het script heb wat ik net liet zien: dat is juist het script waarover dit topic gaat, dat kan nu niet alle plugins opnieuw inladen. En in een apart proces runnen gaat helaas niet, de plugins moeten contact houden met de hoofdclass, en bijna alles draait op plugins dus dit zal wel erg inefficient zijn voor dit script.
 
Hipska BE

Hipska BE

13/08/2009 18:24:00
Quote Anchor link
teuneboon schreef op 13.08.2009 14:34:
@Hipska: Het loopt gewoon goed hoor ^^
Maar over processorbelasting op de server zullen we maar zwijgen zeker? Evenals over het geheugenverbruik..
 
Teun Beijers

Teun Beijers

13/08/2009 19:05:00
Quote Anchor link
Hipska schreef op 13.08.2009 18:24:
teuneboon schreef op 13.08.2009 14:34:
@Hipska: Het loopt gewoon goed hoor ^^
Maar over processorbelasting op de server zullen we maar zwijgen zeker? Evenals over het geheugenverbruik..


Processorbelasting: 0.5%
Geheugengebruik: 60mb

In welke (cross-platform) taal stel jij het dan voor?
Gewijzigd op 01/01/1970 01:00:00 door Teun Beijers
 
Hipska BE

Hipska BE

15/08/2009 23:56:00
Quote Anchor link
Eender welke taal die ontworpen is met het oog op continue draaien..

C++ ofzo?

Die 0.5% is wanneer je PHP scriptje draait onder belasting?
 



Overzicht Reageren

Get Adobe Flash player