You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
2.7 KiB

  1. package verteiltesysteme.aws;
  2. import java.io.BufferedReader;
  3. import java.io.DataOutputStream;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.net.ServerSocket;
  7. import java.net.Socket;
  8. import java.text.DateFormat;
  9. import java.text.SimpleDateFormat;
  10. import java.util.Date;
  11. import redis.clients.jedis.Jedis;
  12. class TCPTimeCounterServer {
  13. public static void main(String args[]) throws Exception {
  14. int tcpPort = 36038;
  15. String redisClusterURL = "vertsys-ec1-0001-002.71rxr9.0001.euc1.cache.amazonaws.com";
  16. DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
  17. // Socket erzeugen
  18. // Warnung, dass Socket nicht geschlossen wird unterdr�cken ;)
  19. @SuppressWarnings("resource")
  20. ServerSocket serverSocket = new ServerSocket(tcpPort);
  21. System.out.println("TCP Time Counter Server ready... waiting for packets...");
  22. while (true) {
  23. // Auf Anfrage vom Client warten
  24. Socket connectionSocket = serverSocket.accept();
  25. // Anfrage vom Client empfangen
  26. BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
  27. DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
  28. // Vom Client gesendete Zahl einlesen und auf aktuellen Z�hlerstand addieren
  29. long number = new Long(new String(inFromClient.readLine()));
  30. // Verbindung zum Redis Cluster (Amazon ElastiCache)
  31. Jedis jedis = new Jedis(redisClusterURL, 6379);
  32. System.out.println("Connected to redis server");
  33. // check whether server is running or not
  34. //System.out.println("redis server is running: " + jedis.ping());
  35. //System.out.println("redis server cluster info: " + jedis.clusterInfo());
  36. // Variable f�r Z�hlerstand des Servers, dieser Z�hler wird durch Anfragen der
  37. // Clients erh�ht
  38. jedis.incrBy("vertsys-counter", number);
  39. long counter = new Long(jedis.get("vertsys-counter"));
  40. jedis.close();
  41. System.out.println("TTL:" + jedis.ttl("vertsys-counter"));
  42. System.out.println("Anfrage von Client " + connectionSocket.getInetAddress() + ":" + connectionSocket.getPort() + " Zahl: " + number + " Z�hlerstand: " + counter);
  43. // Try/Catch hinzugef�gt, nachdem bei Einsatz Amazon AWS (Healthcheck des ELB) clientSentence null war
  44. try {
  45. // Antwort vom Server senden
  46. String output = (Long.toString(counter) + " Zeit: " + System.currentTimeMillis() + " "
  47. + df.format(new Date(System.currentTimeMillis())));
  48. System.out.println("Antwort des Servers: " + output);
  49. // Zeilenumbruch anf�gen, da Client mit readLine auf komplette Zeile wartet
  50. outToClient.writeBytes(output + '\n');
  51. } catch (IOException ioe) {
  52. ioe.printStackTrace();
  53. } catch (NullPointerException npe) {
  54. npe.printStackTrace();
  55. }
  56. }
  57. }
  58. }