Socket Push Service realisieren?

Cpro

Mitglied
Moin - ich habe mal eine generelle Frage wie funktioniert das mit den Push-Diensten generell?

Server <-------------> Client

Funktioniert es prinzipiell so, dass auf dem Client eine Routine (in einer Endlosschleife) läuft und der Server dem Client dann einfach Daten rüber schiebt?

Hat vllt. schon wer im Ansatz so etwas in Java Programmiert?

MfG
 

Lumaraf

Bekanntes Mitglied
Funktioniert es prinzipiell so, dass auf dem Client eine Routine (in einer Endlosschleife) läuft und der Server dem Client dann einfach Daten rüber schiebt?

So war es früher meistens üblich. WebSockets oder Longpolling sind da deutlich schöner. WebSockets sind eine Erweiterung zu HTTP die unter anderem genau dafür da sind dieses Problem besser lösen zu können. Und Longpolling bedeutet nur mit der Antwort auf Request vom Client zu warten bis Daten verfügbar sind, solange bleibt die Verbindung einfach offen und die Anfrage unbeantwortet.

Meine Empfehlung wäre WebSockets zu verwenden und einen Fallback auf Longpolling wenn der Browser noch keine WebSockets unterstützt.
 

Cpro

Mitglied
Also wenn ich das richtig verstanden habe ist es nichts weiteres wie ich es oben beschrieben habe?

Longpolling wäre ja wenn der Client immer beim Server nachfragt hast du was für mich ja/nein?
 

MR_UNIX

Bekanntes Mitglied
Ich denke, es war so gemeint, dass dein Client die Verbindung aufbaut und in der Verbindung einfach wartet. Nicht fragen und nichts wiederholen. Wenn der Server dann eine Antwort gesendet hat geht es weiter.
 

homer65

Top Contributor
Mal ein Beispiel:
Server:
[Java]
package server;
import java.net.*;
import java.io.*;
import common.*;
public class MainThread extends Thread
{
private int port = 0;
private Protokol protokol = new SimpleProtokol();
ServerSocket sock = null;
public MainThread(int port)
{
this.port = port;
}
public void run()
{
protokol.write("MainThread:run:gestartet");
try
{
sock = new ServerSocket(port);
while (Global.runFlag)
{
try
{
Socket con = sock.accept();
ArbeitsThread D = new ArbeitsThread(con);
D.setDaemon(true);
D.start();
}
catch (InterruptedIOException ie)
{
//Mache nichts
}
}
sock.close();
}
catch (Exception e)
{
protokol.write("MainThread:run:Exception:");
protokol.write(e.toString());
}
Global.runFlag = false;
protokol.write("MainThread:run:beendet");
}
}
[/Java]
[Java]
package server;
import java.io.*;
import java.net.*;
import common.*;
public class ArbeitsThread extends Thread
{
private static int number = 0;
public int myNumber = 0;
private Protokol protokol = new SimpleProtokol();
public Socket con = null;
public ArbeitsThread(Socket con)
{
this.con = con;
InetAddress ia = con.getInetAddress();
String client = ia.getHostAddress();
myNumber = getNumber();
protokol.write("ArbeitsThread(" + myNumber + "): Created from " + client);
}
public void run()
{
protokol.write("ArbeitsThread(" + myNumber + "):run:gestartet");
InputStream in = null;
OutputStream out = null;
ObjectInputStream oi = null;
ObjectOutputStream oo = null;
try
{
in = con.getInputStream();
oi = new ObjectInputStream(in);
Object obj = oi.readObject();
Verarbeitung V = new Verarbeitung(obj,this);
Object obk = V.start();
out = con.getOutputStream();
oo = new ObjectOutputStream(out);
oo.writeObject(obk);
oo.flush();
}
catch (Exception e)
{
protokol.write("ArbeitsThread(" + myNumber + "):Exception:" + e.toString());
}
protokol.write("ArbeitsThread(" + myNumber + "):run:beendet");
}
public synchronized int getNumber()
{
number++;
return number;
}
}
[/Java]
Client
[Java]
package client;
import java.net.*;
import java.io.*;
import common.*;
public class ServerRequest
{
private static Protokol protokol = new SimpleProtokol();
private static Socket con = null;
private static OutputStream ou = null;
private static ObjectOutputStream oo = null;
private static InputStream in = null;
private static ObjectInputStream oi = null;
public static Object get(Object send)
{
Object received = null;
try
{
con = new Socket(Parameter.host,Parameter.port);
ou = con.getOutputStream();
oo = new ObjectOutputStream(ou);
oo.writeObject(send);
oo.flush();
in = con.getInputStream();
oi = new ObjectInputStream(in);
received = oi.readObject();
}
catch (Exception e)
{
protokol.write("ServerRequest:Exception:" + e.toString());
System.exit(12);
}
return received;
}
}
[/Java]
 
Ähnliche Java Themen

Ähnliche Java Themen


Oben