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
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ä?
Aihe on jo aika vanha, joten et voi enää vastata siihen.