php websocket server an port 80?

Hallo,

ich bastele grade an nem kleinen browser RTS game (Browser RTS Engine pre - Alpha). für den multiplayer modus hab ich mich für websockets entschieden.. da hab ich mir auch en kleinen php server gebaut der local super leuft.

jetzt wollte ich das ganze mal testeshalber auf einen server tun. nun ist die frage giebts eine möglichkeit soeinen php socket server an port 80 zu binden? weil die meissten hoster verbieten das.

anderst gefragt: ist es möglich auf port 80 zu hören ohne ihn vorher mit socket_bind zu binden?

mein socket code:
PHP:
$master=socket_create(AF_INET, SOCK_STREAM, SOL_TCP)     or die("socket_create() failed");
    socket_set_option($master, SOL_SOCKET, SO_REUSEADDR, 1)  or die("socket_option() failed");
    socket_bind($master, $address, $port)                    or die("socket_bind() failed");
    socket_listen($master,20)                                or die("socket_listen() failed");
    echo "Server Started : ".date('Y-m-d H:i:s')."\n";
    echo "Master socket  : ".$master."\n";
    echo "Listening on   : ".$address." port ".$port."\n\n";


danke schonmal :)
 
ich meine port 80 ist doch schon "blockiert" kannst nicht auf was anderes ausweichen?

//arg unbedachtet denkfehler sry ;)
 
Zuletzt bearbeitet:
dann würde ich net fragen ;)

habe halt gelesen das sowas anscheinend möglich ist und es hat vorteile ... port 80 is so gut wie immer frei in den firewalls, und mann könnte das ganze auf nem shared server laufen lassen.

hab mich schon durch die ganzen socket php sachen gequält und da sind manche funktionen dabei die so klingen also ob sowas machen könnten nur ich krigs net hin und finde auch kaum beispiele..

ich breuchte irgentwas das die anfragen von port 80 auf irgent einen freinen port (8000 oder 8080) umleitet wo ich dann mit meinem gebundenen socket weitermachen kann.

habe auch gelesen das bei der entwicklung von websocket extra darauf geachtet wurde, das es neben dem http sachen auf einem port laufen kann .. weiss halt net ob das nur für die javascript (bei mir client) seite gilt...
 
Es gibt theoretisch 2 Möglichkeiten.

Möglichkeit 1: Du programmierst einen eigenen Webserver, der einen Multicast-Socket nutzt. Deine PHP-App könnte dann der gleichen Multicast-Gruppe beitreten. SO_REUSEADDR muss natürlich von beiden Programmen als Socket-Parameter genutzt werden.

Möglichkeit 2: Alternativ kannst du auf Linux- und einigen Unix-Systemen ein "Remapping" der Ports nutzen. Das heisst, dass du die Programme auf anderen Ports lauschen lässt und dass du sie mittels Firewall auf Port 80 umleitest. Ob das mittlerweile auch mit Windows geht, hab ich keine Ahnung. Ich vermute aber, das dürfte mit den Browsern Schwierigkeiten machen. Dein Webserver müsste immer darauf achten ob der Request auch wirklich ein HTTP-Request ist oder ob sich ggf. deine PHP-App meldet und er die Anfrage ignorieren kann.

Binden kann ein Socket jedenfalls immer nur an einen freien Port. Du wirst also um einen modifizierten Webserver nicht herum kommen. Übrigens sind auch zumeist die SMTP-Ports frei. Wenn auf dem Server also kein Mailserver läuft und du root-Rechte hast, könntest du deine PHP-App an Port 25 binden. Allerdings sollte sich nach dem Binden der Socket-Owner ändern, so dass der Rest des Programmablaufs nicht als root stattfindet. Es ist bekanntermaßen keine gute Idee Programme mit Root-Rechten an's Netz zu hängen. ;)
 
ok danke :)

also wirds nix mit dem websocket server auf nem shared hoster :(

... Dein Webserver müsste immer darauf achten ob der Request auch wirklich ein HTTP-Request ist oder ob sich ggf. deine PHP-App meldet und er die Anfrage ignorieren kann.

wenn ich das richtig verstanden habe, haben die dafür websocket so definiert das die gesendeten websocket sachen immer "markiert" sind .. in php muss ich z.b. immer chr(0).$data.chr(255) um die zu sendenden sachen tun. es startet also mit 0 und enden mit dem letzten ascii zeichen und dazwischen darf utf8 sein.
 
Zurück
Oben