Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: PHP socket server ja ongelma TCP_NODELAY -flagin kanssa

shitbreak [10.05.2009 15:32:54]

#

Ajattelinpa ruveta kokeilemaan server socketin rakentamista php:llä, tcp_nodelay flagin kanssa (pitäisi poistaa ylimääränen 200ms viive joka tcp pakettien lähettämisessä ymmärtääkseni tulee...):

Ensinnäkin:

socket_set_option($sock, IPPROTO_TCP, TCP_NODELAY, 1);

Onkohan ylläolevassa socketin asetuksien määrittelyssä kaikki kohdallaan?
Jos on, osaako joku kertoa mikä voisi auttaa?

<?php
set_time_limit (0);
$address = 'hosti.info';
$port = 9006;
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
socket_set_option($sock, IPPROTO_TCP, TCP_NODELAY, 1);
socket_bind($sock, $address, $port) or die('virhe');
socket_listen($sock);
while (true) {
 $client = socket_accept($sock);
 $input = socket_read($client, 1024);
 $output = ereg_replace("[ \t\n\r]","",$input).chr(0);
 socket_write($client, "$output\r\n");
 socket_write($client, "$output\r\n");
 socket_write($client, "$output\r\n");
 /* socket_close($socket); Tyhjentää socketin välittömästi ja data kulkee ilosesti ilman viivettä */
}
socket_close($sock);
?>

Klientin tulostus yhteyden ottamisen jälkeen.

114ms. -> Incoming data: spam1
298ms. -> Incoming data: spam2
298ms. -> Incoming data: spam3

Metabolix [10.05.2009 16:19:05]

#

Kannattaa ehkä perehtyä asiaan edes hieman eikä vain ottaa netistä satunnaisia koodinpätkiä, jotka ratkaisevat jonkin kuulemma-ongelman. Jos käytät tuota TCP_NODELAY-lippua sopivasti väärin, voi olla, että yhteys siitä vain hidastuu. Tee siis ensin järkevä ohjelma ja katso vasta sitten, lähetteletkö sattumoisin sellaisia paketteja, että ne jäävät puskuriin ylimääräiseksi sekunnin kymmenykseksi vaikka ne pitäisi jostain eritysestä syystä toimittaa perille nyt eikä heti.

Kyseessä ei siis ole mikään taikalippu, joka maagisesti nopeuttaa TCP-protokollaa 0,2 sekuntia. Jos näin olisi, miksei tuo olisi oletuksena käytössä?

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta