Jump to content
php.lv forumi

Socket server


Aleksandrs

Recommended Posts

Intresanta un noderīga lieta ir socket serveri, pieņem un atbild uz pieprasijumiem, kad tie nepieciešami dinamiskā vidē ietaupa traffiku...

 

Uz php viens primitīvs pimērs ir.. Zend lapā

 

Jautājums, vai ar PHP kāds tādas lietas ir taisijis, vai tomēr prieksroka ir perl/java/u.c. socket serveriem?

Link to comment
Share on other sites

Taisot savādākiem līdzekļiem, lai iegūtu savaigāku informāciju vajag vislaik atjaunot datus(pieprasīt jaunus) tas taču ir lieks traffiks..

 

Taīsīt uz php vai citām valodām ir kāda būtiska atšķirība?

Un kā var palaist php kā cgi laikam, lai nav jāizmanto kā zem apache moduļa... ?

Link to comment
Share on other sites

Taisot savādākiem līdzekļiem, lai iegūtu savaigāku informāciju vajag vislaik atjaunot datus(pieprasīt jaunus) tas taču ir lieks traffiks..

Un kāda atšķirība no šī būs lietojot soketus? Praktiski jebkurš HTTP serveris taču arī veidots izmantojot soketus.

 

Īpaši atšķirība no dažādām valodām nav, ja nu vienīgi jāimplementē algoritmi, kas patērē daudz resursu skaitļošanai. Tad labāk izvēlēties kompilējamu valodu.

PHP cgi var palaist vienkārši - Windows distribūcijai php.exe fails (php-cgi.exe zem php4). Zem linux neatceros kā, bet pamēģini vienkārši php.

Edited by bubu
Link to comment
Share on other sites

Nu Zend paraugā it kā ir normāli, noslodzei nav jābūt lielai, ja nenotiek īpaši daudz datu pārraide.

 

Varbūt tu pateiksi, kāpēc tavuprāt šādi veidots datu servēšanas veids ir labāks, nekā izmantojot parastu http get/post pieprasījumu?

Link to comment
Share on other sites

Spēlēm, citām tiešsaites lietām, nevajag katru reizi pārbaudīt vai ir jauna informācija lapā attēlota...

 

Kā es novēroju, tad procesora noslodze pieeaug tad, kad es izdzlēdzu savu client programmu(paliek neatvienojusies no socket servera) vai to var salabot no servera puses ?

Link to comment
Share on other sites

es vienreiz caur flash ar actionscript veidoju chatu... socket serveris ieksh php... un itkaa viss norm.. bet kad gribeeju developeet visu talaak.. atduuros pret stabu...

PHP vienaa laikaa var pildiit tikai vienu uzdevumu... bet ja vajag vairaakus tad var lek uz ezha..

Lasiijos netaa, citi arii teica, ka php var izmantot, bet nekas jaudiigs nebus un ieteica vismaz python... tad nu kopsh taa laika paartraucu un taa veel nesmu uztaisiijis to socket serveri ar c/c++ :) Laika nav utt.. un pie tam sava hobija peec tas ir bishk pa daudz, nedaudz velaak varbuut istenoshu...

Link to comment
Share on other sites

Atradu problēmu, bet nezinu kā labot, no zend koda izgreizu šo rindiņu:

if ($input == null) {
               // Zero length string meaning disconnected
               unset($client[$i]);
           }

 

Bet ar to ir problēma, ja vairāki klienti pievienojušies un viens sūta datus, citus tajā brīdī atvieno, jo viņi neko nesūta...

 

Kā lai to salabo?

 

 

Sākumā jau var uz php, ja tā lieta sanāks tīri smuka, tad jau varēs domāt socket servera izveidi uz piemērotākas valodas, tikmēr nav laika apgūt citas valodas...

Link to comment
Share on other sites

  PHP vienaa laikaa var pildiit tikai vienu uzdevumu... bet ja vajag vairaakus tad var lek uz ezha..

Zem Linux var lieot POSIX threadus, tādējādi veidojot vairākprocesu programmu. Zem Windows gan nekas tāds nesanāks.

Link to comment
Share on other sites

Kā es novēroju, tad procesora noslodze pieeaug tad, kad es izdzlēdzu savu client programmu(paliek neatvienojusies no socket servera) vai to var salabot no servera puses ?

Parādi kodu, kā lai zin kā tu tur esi visu saveidojis :)

 

Spēlēm, citām tiešsaites lietām, nevajag katru reizi pārbaudīt vai ir jauna informācija lapā attēlota...
Ā nu ne-webiskām (lapām) tas tiešām der.

 

Bet ar to ir problēma, ja vairāki klienti pievienojušies un viens sūta datus, citus tajā brīdī atvieno, jo viņi neko nesūta...

Nesapratu. Kādā rakā tu tur citus klientus atvienu, ja viņi nesūta neko?

Edited by bubu
Link to comment
Share on other sites

Nesapratu. Kādā rakā tu tur citus klientus atvienu, ja viņi nesūta neko?

 

Apskaties to zend kodu, man no tā nekas būtisks neatšķirās tikai atbildes funkcijas saveidoju, bez kurām ir tā pati problēma..

 

Tur ir uztaisīts, ja kāds klients nesūta neko, bet cits sūta, ciņu izņem no $client Array, bet ja viņš nav $client Array ielikts vispār, tad viņa soccket atvieno.

Link to comment
Share on other sites

×
×
  • Create New...