Comu (21.04.2012)
Thema: [PHP] Listener
-
21.04.2012, 16:59 #1
- Registriert seit
- 18.12.2011
- Beiträge
- 159
- Blog Entries
- 2
Thanked 182 Times in 98 Posts[PHP] Listener
Hallo,
Heute habe ich an einem Listener gearbeitet mit Multithreading, dafür habe ich mir aus dritter Quelle eine kleine Klasse geholt um in PHP zu „threaden”.
Das ganze soll noch ein funktionierender Chatserver werden in PHP, aufgefallen ist mir nur, dass er nur Verbindungen vom localhost annimmt. Ich hoffe jemand hat eine Idee warum das so ist.
PHP-Code:<?php
require_once("thread.php");
class Client {
public $username;
private $client_sock;
public function __construct($client_sock, $username) {
$this->username = $username;
$this->client_sock = $client_sock;
}
}
class Server {
public $ip;
public $port;
private $wfc_thread;
private $server_sock;
public $clientlist;
public function __construct($ip, $port) {
$this->ip = $ip;
$this->port = $port;
$this->clientlist = array();
$this->server_sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($this->server_sock, $this->ip, $this->port);
socket_listen($this->server_sock);
$this->wfc_thread = new Thread(array($this, "waitForClients"));
$this->wfc_thread->start(10, "listen_clients");
}
public function waitForClients($_limit, $_name) {
while(true) {
$inc_client = socket_accept($this->server_sock);
if($inc_client !== false) {
printf("[!] NEW CLIENT INCOMING\n");
for($i = 0; $i <= count($this->clientlist); $i++) {
if(is_null($this->clientlist[$i])) {
$this->clientlist[$i] = new Client($inc_client, rand(1,1000));
break;
}
}
}
sleep(1);
}
}
}
$server = new Server("127.0.0.1", 6565);
while(true) { sleep(1); }
?>
Der Server läuft aber nur unter Linux und wer es schon gemerkt hat, dass ganze startet man über die Shell.
Code:php5 chatsrv.php
.
-
The Following 2 Users Say Thank You to Raumi For This Useful Post:
-
21.04.2012, 17:07 #2
AW: [PHP] Listener
Hätte man auch mit socket_select ohne thread klasse machen können.
-
21.04.2012, 17:08 #3
AW: [PHP] Listener
$server = new Server("127.0.0.1", 6565);
Deswegen geht es nicht. Statt 127.0.0.1 muss die Internet IP vom Server stehen...
Davon mal abgesehen ist PHP defintiv die schlechteste Lösung für ein 24/7 Server..
Und davon mal abgesehen gibt es keine Threads in PHP... Auch wenn du es gerne hättest es ist einfach nicht so.. Sleep(1) ist auch ne schlechte alternative, weil er dann 1 Sekunde schläft (anders als in c++). Da wäre eher ein usleep/microsleep angebracht
-
-
21.04.2012, 17:10 #4Gelöschter BenutzerGast
AW: [PHP] Listener
Für die Leute, die in naher Zukunft einen Chatserver coden wollen, denen kann ich nur nodeJS und socket.IO ans Herz legen!
Beispiel (Source): https://github.com/sprain/sprain-s-Socket.IO-chat
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.