php.de

Zurück   php.de > Webentwicklung > Software-Design

Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 26.03.2010, 20:36  
Benutzer
 
Benutzerbild von papalangi_44
 
Registriert seit: 12.02.2009
Beiträge: 63
PHP-Kenntnisse:
Fortgeschritten
papalangi_44 befindet sich auf einem aufstrebenden Ast
Standard PHP Server und Java Applet als Client

Hallo,

ich habe ein Java-Applet, das Textenachrichten und kleine Sounddateien
erzeugt, diese möchte ich an den Webserver schicken , der sie wiederum
sofort an aktuell registrierte Clients ( <= 12) verteilen soll.

Da ich nur einen "normalen" Webspace mit PHP habe kann ich da natürlich nicht einen Javaserver programmieren und starten der einen Port abfragt.

Die Textdateien und die Soundfiles (Sprachaufzeichnung) sind nicht umfangreich (evtl jeweils ca 1 MB).

Wie könnte ich so etwas lösen. Mir fehlt da im Moment etwas die Idee.

Hochladen per AJAX oder upload? Clientseitig kann ich zwar ein Socket aufmachen aber auf der Serverseite?

Die Clients alle Sekunde per AJAX nachfragen lassen, ob etwas vorliegt
( wäre sicher übertriebn, da evtl nur alle 10 Minuten etwas kommt, muß aber sofort weitergeleitet werden).

Hat jemand evtl einen Denkanstoß für mich?

Danke papalangi_44
papalangi_44 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 26.03.2010, 21:36  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Ausser pull request wird Dir wohl nicht viel übrig bleiben.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online   Mit Zitat antworten
Alt 26.03.2010, 22:24  
Erfahrener Benutzer
 
Registriert seit: 17.07.2009
Beiträge: 223
PHP-Kenntnisse:
Fortgeschritten
Tiberius zeigte ein beschämendes Verhalten in der Vergangenheit
Tiberius eine Nachricht über ICQ schicken
Standard

Du könntest mit PHP einen SocketServer aufsetzen

// Ups, übersehen das es lediglich ein Webspace ist
Tiberius ist offline   Mit Zitat antworten
Alt 29.03.2010, 08:20  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.169
PHP-Kenntnisse:
Fortgeschritten
xm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphäre
Standard

Du könntest immer einen Ajax-Request an den Server absenden, der dann 10 - 20 sec. läuft und währenddessen abfragt, ob etwas neues kommt.
xm22 ist offline   Mit Zitat antworten
Alt 01.04.2010, 14:13  
Benutzer
 
Benutzerbild von papalangi_44
 
Registriert seit: 12.02.2009
Beiträge: 63
PHP-Kenntnisse:
Fortgeschritten
papalangi_44 befindet sich auf einem aufstrebenden Ast
Standard

Auf so eine Lösung mit AJAX-Requests wird es wohl hinauslaufen.

Jetzt aber erst mal allen schöne Osterfeiertage.
papalangi_44 ist offline   Mit Zitat antworten
Alt 01.04.2010, 15:06  
Erfahrener Benutzer
 
Registriert seit: 25.09.2009
Beiträge: 2.115
PHP-Kenntnisse:
Fortgeschritten
BlackScorp wird schon bald berühmt werdenBlackScorp wird schon bald berühmt werden
Standard

eventuell Websockets, habe es aber nie verwendet aber anscheinend ist es eine alternative zu Server-Push

WebSockets – Wikipedia
__________________
Mein kleines Projekt
-Cruel Online-
5 von 3 Leuten können kein Bruchrechnen
BlackScorp ist offline   Mit Zitat antworten
Alt 04.05.2010, 07:29  
Benutzer
 
Registriert seit: 04.01.2009
Beiträge: 43
Deltachaos befindet sich auf einem aufstrebenden Ast
Standard

Problem ist die Browserunterstützung.


Jedoch kann man die Socket Funktonalität von Flash nach Javascript brigen.
Dann hat man aber auch nur einen Client.

An diesem Punkt kann ich ja mal meine kleine Socket Classe anbringen:

redServerSocket.class.php
PHP-Code:
<?php

    
class redServerClient
    
{
    
        private 
$redServerSocket;
        private 
$commandcache '';
        public 
$get_history = array();
        public 
$send_history = array();
        public 
$handle;
        public 
$id;
        public 
$lastused;
        public 
$connected;
        public 
$data = array();
        
        public function 
__construct($redServerSocket$handle)
        {
            
$this->redServerSocket $redServerSocket;
            
$this->handle $handle;
            
$this->id $redServerSocket->getIdFromHandle($handle);
            
            
$this->connected time();
            
$this->lastused time();
            
        }
        
        public function 
addCache($string)
        {
            
$this->lastused time();
            
$this->commandcache .= $string;
        }
        
        public function 
getCache()
        {
            return 
$this->commandcache;
        }
        
        public function 
clearCache()
        {
            if(
is_array($this->get_history))
                
$this->get_history[] = substr($this->commandcache0, (strlen($this->redServerSocket->end) * -1));
            
$this->commandcache '';
        }
        
        public function 
disconnect($code 3000)
        {
            @
socket_shutdown($this->handle);
            @
socket_close($this->handle);
            
$this->redServerSocket->callClientDisconnect($this->id$code);
            
$this->redServerSocket->unsetClient($this->id);
            return 
TRUE;
        }
        
        public function 
write($data)
        {
            
$this->redServerSocket->callDataSend($this->id$data);
            if(
is_array($this->send_history))
                
$this->send_history[] = $data;
            return 
socket_write($this->handle$data);
        }
        
        public function 
send($data)
        {
            return 
$this->write($data);
        }
        
        public function 
lastErrorCode()
        {
            return 
socket_last_error($this->handle);
        }
        
        public function 
lastErrorString()
        {
            return 
socket_strerror($this->lastErrorCode());
        }
        
    }
    
    abstract class 
redServerSocket
    
{
    
    
        private 
$code = array(
            
'from_api'            => 3000
            
'timeout'            => 3001
            
'connection_closed'        => 3002,
            
'connection_refused'        => 3003
        
);
        private 
$mainsocket NULL;
        private 
$clients = array();
        
        protected 
$host 0;
        protected 
$port 0;
        protected 
$timeout NULL;
        
        public 
$end NULL;
        
        protected function 
onDataRecieve($clientObj$data)
        {
            return 
TRUE;
        }

        protected function 
onDataSend($clientObj$data)
        {
            return 
TRUE;
        }        
        
        protected function 
onClientConnect($clientObj)
        {
            return 
TRUE;
        }
        
        protected function 
onClientDisconnect($clientObj$code)
        {
            return 
TRUE;
        }
        
        protected function 
onSocketReady($host$port)
        {
        }
        
        protected function 
onSocketError($error$client false)
        {
        }
        
        public function 
__construct($port NULL$host NULL)
        {
            if(
$this->end === NULL)
                
$this->end chr(4);
            if(
false == ($this->mainsocket = @socket_create(AF_INETSOCK_STREAMSOL_TCP)))
            {
                
$this->onSocketError($this->lastErrorCode());
            }
            else
            {
                @
socket_set_option($this->mainsocketSOL_SOCKETSO_REUSEADDR1);
                if(
$port !== NULL)
                    
$this->port $port;
                if(
$host !== NULL)
                    
$this->host $host;
                if(
false == ($ret =@socket_bind($this->mainsocket$this->host$this->port)))
                {
                    
$this->onSocketError($this->lastErrorCode());
                }
                else
                {
                    
$ret socket_listen($this->mainsocket);
                    
$this->onSocketReady($this->host$this->port);
                }
            }
        }
        
        public function 
callDataSend($id$data)
        {
            if(!
is_object($id))
                
$id $this->clients[$id];
            
$this->onDataSend($id$data);
        }
        
        public function 
callClientDisconnect($id$code)
        {
            if(!
is_object($id))
                
$id $this->clients[$id];
            
$this->onClientDisconnect($id$code);
        }
        
        public function 
getIdFromHandle($handle)
        {
            
$str = (string)$handle;
            
$str substr($str13);
            return (int)
$str;
        }
        
        public function 
getClients()
        {
            return 
$this->clients;
        }
        
        public function 
unsetClient($client)
        {
            unset(
$this->clients[$client]);
        }
        
        public function 
clientCheck()
        {
            
$localClients = array();
            foreach(
$this->clients as $num => $clientObj)
            {
            
                if(
$this->timeout !== NULL && $clientObj->lastused time() - $this->timeout && $this->onClientDisconnect($clientObj$this->code['timeout']))
                    
$clientObj->disconnect($this->code['timeout']);
                else
                    
$localClients[$clientObj->id] = $clientObj->handle;
            }
            
            
$set_r array_merge((array)$this->mainsocket$localClients);
            
$set_w NULL;
            
$set_e $localClients;
            
            
//    Check for new Data.
            //    If the mainsocket in the array $set_r
            //    then is there a new Client!
            //    If not then is there new Data from the Socket in the Array
            
            
if( ( $ret =@socket_select($set_r$set_w $set_e 1) ) > )
            {
                foreach(
$set_r as $data)
                {
                    if(
$data == $this->mainsocket//Is it the mainsocket there are new clients in it!
                    
{
                        
$newclient = @socket_accept($this->mainsocket);
                        if(
$newclient)
                        {
                            
$id $this->getIdFromHandle($newclient);
                            
$clientObj = new redServerClient($this$newclient);
                            
$this->clients[$id] = $clientObj;
                            if(
$this->onClientConnect($clientObj) === FALSE)
                                
$clientObj->disconnect($this->code['connection_refused']);
                        }
                        else
                            
$this->onSocketError($this->lastErrorCode());
                    }
                    else
                    {
                        
$data_read socket_read($data1024);
                        
$id $this->getIdFromHandle($data);
                        if(
$data_read === false)
                        {
                            
$ret $this->onSocketError($this->lastErrorCode(), $this->clients[$id]);
                            if(!
$ret)
                                
$this->clients[$id]->disconnect($this->code['from_api']);
                        }
                        else
                        {
                            if(
strlen($data_read) > && isset($this->clients[$id]))
                            {
                                
$this->clients[$id]->lastaction time();
                                
$this->clients[$id]->addCache($data_read);
                                
$endstr_len strlen($this->end);
                                if(
substr($this->clients[$id]->getCache(), ($endstr_len * -1), $endstr_len) === $this->end)
                                {
                                    
$this->onDataRecieve($this->clients[$id], substr($this->clients[$id]->getCache(), 0, ($endstr_len * -1)));
                                    
$this->clients[$id]->clearCache();
                                }
                            }
                            else
                                
$this->clients[$id]->disconnect($this->code['connection_closed']);
                        }
                    }
                }
                foreach(
$set_e as $handle//Oh, these Clients have an ugly Error. I kick them from my List!
                
{
                    
$id $this->getIdFromHandle($handle);
                    
$this->clients[$id]->disconnect($this->code['connection_closed']);
                }
            }
        }
        
        public function 
lastErrorCode()
        {
            return 
socket_last_error($this->mainsocket);
        }
        
        public function 
lastErrorString()
        {
            return 
socket_strerror($this->lastErrorCode());
        }
    }
    

    
?>
redServerSocket.example.class.php
PHP-Code:
<?php
    $port 
1338;
           
    include(
'redServerSocket.class.php');
    
    
/*
        Metoden der Clients Objekte:
        
        public $get_history = array();
        //echo "Dein letztes Komando war: $get_history[0]"
        public $send_history = array();
        //echo "Ich habe dir zuletzt gesendet: $send_history[0]"
        public $handle; //Client Socket Handle. Siehe: http://php.net/manual/de/function.socket-accept.php
        public $id; //Client ID
        public $lastused; //Unix Timestamp der letzten Client Reaktion.
        public $connected; //Unix Timestamp des Verbindungszeitpunktes
        public $data = array(); //Ein Array zum Speichern von Session Variablen
        
        
        public function addCache($string) //Fügt $string zum commandcache hinzu
        public function getCache() //Gibt den aktuellen commandcache zurück
        public function clearCache() //Löscht den aktuellen commandcache
        
        public function disconnect($code = 3000) //Schliest Verbindung mit Fehlercode
        public function write($data) //Sendet Daten an Client. Rückgabe von function: http://de3.php.net/manual/en/function.socket-write.php
        public function send($data) //Alias für write($data)
        
        public function lastErrorCode() //Alias für: socket_last_error($this->handle)
        public function lastErrorString() //Alias für: socket_strerror(socket_last_error($this->handle))
    
    */
    
    
class Server extends redServerSocket
    
{
        
        
//$this->end = '\n' //Begrenzer der einzelnen Komandos. Standart ist: chr(4) (EOT)
        //$this->timeout = 3600; //Zeit in der Client Nachrichten senden muss bevor er aus der Liste geworfen wird.
                     //NULL deaktiviert das Timeout. Standart ist: NULL
        
        //public function lastErrorCode() //Alias für: socket_last_error($this->mainsocket)
        //public function lastErrorString() //Alias für: socket_strerror(socket_last_error($this->mainsocket))
        //public function getClients() //return $this->clients.
        
        
protected function onDataRecieve($clientObj$data)
        {
            if(
$data == 'Hallo')
                
$clientObj->data['GREET'] = true;
            echo 
"onDataRecieve [" $clientObj->id "]: " $data "\n";
            
$clients $this->getClients();
            foreach(
$clients as $id => $clientObj)
                
$clientObj->write('[' $clientObj->id ']: ' $data);
            
        }

        protected function 
onDataSend($clientObj$data)
        {
            echo 
"onDataSend [" $clientObj->id "]: " $data "\n";
        }        
        
        protected function 
onClientConnect($clientObj)
        {
            echo 
"onClientConnect [" $clientObj->id "]\n";
            
//$clientObj->get_history = NULL; //Deaktiviert die get_history
            //$clientObj->send_history = NULL; //Deaktiviert die send_history
            //return FALSE; //Wenn return false wird der client abgelehnt
        
}
        
        protected function 
onClientDisconnect($clientObj)
        {
            echo 
"onClientDisconnect [" $clientObj->id "]\n";
        }
        
        protected function 
onSocketReady($host$port)
        {
            echo 
"Socket ready!!\n";
        }
        
        protected function 
onSocketError($errorcode$clientObj false)
        {
            if(
$clientObj !== false)
                echo 
"Error [" $clientObj->id "]" $this->lastErrorString(); //Fehler von Client
            
else
                echo 
"Error" $this->lastErrorString(); //Fehler von Mainsocket
            //return true; //läst den Client, sollte es ein Fehler sein bei dem er normalerweise disconnectet wird, in der Liste;
        
}
    
    }
    
    echo    
"Server startet on Port: ".$port."\n" .
        
"On Liux and Windows Systems you can connect to the server with:\n" .
        
"telnet <IP> ".$port."\n" .
        
"You can disconnect by close the Terminal\n" .
        
"You can shutdown the Server by press CTRL + C in the Server Terminal\n" .
        
"GL & HF!\n" .
        
"#######################################################################\n";
    
    
$host NULL;
    
$socket = new Server($port$host); //Port und Host. Wenn Host === NULL dann hört der Server auf alle IP Adressen des Hosts
    
    
while(true)
    {
        
$socket->clientCheck(); //Prüft auf neue Nachrichten. 
    
}

?>

Geändert von Deltachaos (04.05.2010 um 07:42 Uhr).
Deltachaos ist offline   Mit Zitat antworten
Alt 19.05.2010, 08:53  
Neuer Benutzer
 
Registriert seit: 11.05.2009
Beiträge: 20
Hans_James befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

erstmal danke, genau das habe ich gesucht. Kannst du mir auch ein Bespiel für den Client geben ???

Gruß

Hans
Hans_James ist offline   Mit Zitat antworten
Alt 19.05.2010, 12:43  
Erfahrener Benutzer
 
Registriert seit: 12.05.2005
Beiträge: 1.038
PHP-Kenntnisse:
Fortgeschritten
notyyy befindet sich auf einem aufstrebenden Ast
Standard

google mal nach jsocket. ist sehr einfach ...
notyyy ist offline   Mit Zitat antworten
Alt 21.05.2010, 23:30  
Neuer Benutzer
 
Registriert seit: 11.05.2009
Beiträge: 20
Hans_James befindet sich auf einem aufstrebenden Ast
Standard

ermal danke, habe es zum laufen bekommen. Eine frage habe ich noch, kann man auf ein xxamp server ein Socket server und gleichzeitig mehere client laufen lassen???
Hans_James ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Bilder vom Client ohne post auf Server speichern Psydl PHP-Fortgeschrittene 15 02.07.2009 15:52
exec() auf win 2003 Server geqoo PHP-Fortgeschrittene 9 30.04.2009 21:57
Connection zu MSSQL Server 2008 DonBolli Datenbanken 2 11.04.2009 16:57
[Erledigt] Apache install geht nicht SteiniKeule Server, Hosting und Workstations 7 27.02.2009 08:40
Datei auf ANDEREM Server verschieben SirRobin PHP Tipps 2008 6 16.11.2008 12:18
[Erledigt] WAMP unter Windows 2000 Server oder Windows 2003 Server Mecronomecon Server, Hosting und Workstations 3 18.06.2008 09:15
Server für shell_exec() / exec() vorbereiten Martek Server, Hosting und Workstations 2 16.03.2007 15:03
streaming von videos, server lahmt bereits nach einem abruf snowflow Server, Hosting und Workstations 6 30.11.2006 18:04
Client IP bei include über anderen Server PHP Tipps 2006 5 14.03.2006 14:55
Socket Client schnurzli PHP Tipps 2006 9 09.03.2006 20:49
Frage zu Windows Server 2003 b++ Off-Topic Diskussionen 1 03.03.2006 09:41
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57
[Erledigt] dateiupload - windows client - suse server Server, Hosting und Workstations 2 16.12.2004 21:34
Datei nach Transfer löschen? (Server -> Client) PHP Tipps 2004-2 1 14.12.2004 20:33
daten von client auf den server kopieren PHP Tipps 2004 4 23.06.2004 15:27

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
java applet php, php java applet, java client php server, php applet, applet php, java applet server fehler, java applet socket verbindung php, writing socket client php, php server java client, \php server\ java client, php java, applet socket php, java client auf php server, client server java php, java applet in php, client server java und php, java applet socket php, java applet client server, java php, http://www.php.de/software-design/66211-php-server-und-java-applet-als-client.html

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:38 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum