Ik ben bezig met het maken game Panel, hierop wil ik informatie tonen van verschillende games.
Zoals jullie uiteraard weten verloopt de informatie aanvraag van gameservers via een udp poort. En dus kan men de fsocket functies gebruiken om informatie uit te lezen. Echter heb ik twee vragen over dit onderwerp.
1 Het wordt aangeraden in de php manual dat fread over het netwerk het beste kan verlopen in chuncks. Echter heb ik nu nog het ontwerp dat het per byte/string wordt uitgelezen. Hieronder staan de functies daarvan:
Maar wat er nu dus eigenlijk moet gebeuren is dat alle informatie met 1 fread wordt uitgelezen van de server en dat in 1 var te stoppen echter moeten deze functies dan omgeschreven worden dat dit van die var wordt uitgelezen. Hoe kan men dit het beste aanpakken, aangezien het dan geen stream meer is?
2. En mijn tweede vraag gat over timeouts betreffende de UDP aanvragen. Er zijn een aantal functie waarmee een timeout geforceerd kan worden:
* fsockopen ( string target [, int port [, int &errno [, string &errstr [, float timeout]]]] ) door hier de time out in te stellen
* stream_set_timeout ( resource stream, int seconds [, int microseconds] ) door deze in te vullen en op time outs te controleren met bijvoorbeeld een if statement
Echter heb ik gemerkt dat beide oplossing niet echt 100% werken, en check of er enige informatie is opgehaald en daar een timeout op te baseren nog beter werkt. want de boolean stream_set_timout voor de timed_out wordt niet 1 als ik naar een server verwijs die niet bestaat. Wie weet hier een goede oplossing voor?
Zoals jullie uiteraard weten verloopt de informatie aanvraag van gameservers via een udp poort. En dus kan men de fsocket functies gebruiken om informatie uit te lezen. Echter heb ik twee vragen over dit onderwerp.
1 Het wordt aangeraden in de php manual dat fread over het netwerk het beste kan verlopen in chuncks. Echter heb ik nu nog het ontwerp dat het per byte/string wordt uitgelezen. Hieronder staan de functies daarvan:
PHP:
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
| function getByte() { $Result = ord( fread( $this -> Server['Resource'], 1 ) ); return $Result; } function getChar() { $Result = fread( $this -> Server['Resource'], 1 ); return $Result; } function getInt16() { $Result = unpack( 'sint', fread( $this -> Server['Resource'], 2 ) ); return $Result['int']; } function getInt32() { $Result = unpack( 'iint', fread( $this -> Server['Resource'], 4 ) ); return $Result['int']; } function getFloat32() { $Result = unpack( 'fint', fread( $this -> Server['Resource'], 4 ) ); return $Result['int']; } function getString() { while ( ( $Byte = fread( $this -> Server['Resource'], 1 ) ) != chr( 0 ) ) { $Result .= $Byte; } return $Result; } |
Maar wat er nu dus eigenlijk moet gebeuren is dat alle informatie met 1 fread wordt uitgelezen van de server en dat in 1 var te stoppen echter moeten deze functies dan omgeschreven worden dat dit van die var wordt uitgelezen. Hoe kan men dit het beste aanpakken, aangezien het dan geen stream meer is?
2. En mijn tweede vraag gat over timeouts betreffende de UDP aanvragen. Er zijn een aantal functie waarmee een timeout geforceerd kan worden:
* fsockopen ( string target [, int port [, int &errno [, string &errstr [, float timeout]]]] ) door hier de time out in te stellen
* stream_set_timeout ( resource stream, int seconds [, int microseconds] ) door deze in te vullen en op time outs te controleren met bijvoorbeeld een if statement
Echter heb ik gemerkt dat beide oplossing niet echt 100% werken, en check of er enige informatie is opgehaald en daar een timeout op te baseren nog beter werkt. want de boolean stream_set_timout voor de timed_out wordt niet 1 als ik naar een server verwijs die niet bestaat. Wie weet hier een goede oplossing voor?