Avatar billede javaknold Nybegynder
17. juni 2003 - 17:49 Der er 17 kommentarer

Server/client, RMI/Sockets, database

Jeg er meget i tvivl mht. hvordan jeg bedst tackler databaseadgang til server, min plan var at bruge RMI i stedet for Sockets, ene og alene fordi jeg har sat mig lidt ind i RMI, men ikke i sockets, men er det nu også det rigtige at bruge.
Jeg kan som minimum forvente 50 clienter, men det kan sagtens stige væsentligt.

Har forstillet mig noget med en DBhandler der loggede på databasen (MySql) gennem denne ville jeg så checke brugerne i tabel, så er jeg til gengæld lidt i tvivl om hvordan jeg kommer videre herfra.

Og hvordan lige mht. hvis flere clienter forespørger databasen samtidig, står de i kø og venter på svar, eller sendes der svar til flere clienter samtidig?

Eller for at spørge på en anden måde, hvordan griber jeg dette rigtigt an ?

Håber ovenstående nogenlunde dækker situationen, ellers spørg!
Jeg kan sagtens vente et par dage på svar.
Avatar billede magoo20000 Nybegynder
17. juni 2003 - 17:53 #1
Hvilken type applikation vil du lave? Hvis der er tale om Client GUI -> Server ->DBServer ville jeg kaste mig ud i RMI. Ved at benytte Sockets skal du selv kode en masse ting, der allerede er med i RMI.
Avatar billede magoo20000 Nybegynder
17. juni 2003 - 17:55 #2
En socket er en indpakning af forbindelsen mellem processer og repræsenterer én proces i forbindelsen til en anden proces (evt. på en anden maskine)
Kan med fordel være pakket ind i en klasse, som fx i java.
Sockets kan anvendes til forbindelsesorien-teret/forbindelsesløs kommunikation og to ting karateriserer sockets:
IP-adresse
Portnummer (1025 - 65535)
Avatar billede magoo20000 Nybegynder
17. juni 2003 - 17:57 #3
I sockets er princippet, at man sender data i form af en byte-stream mellem server og  klient.
Dette betyder, at objekter skal serialiseres(Dette klarer Java i en vis grad for os).
Serveren skal fortolke byte-streamen til metode-kald og input-parametre.
Dvs. man skal selv håndtere protokoller på applikationsniveau.
Avatar billede magoo20000 Nybegynder
17. juni 2003 - 18:01 #4
Du kan evt. benytte en connection-pool til databasefirbindelser, så dine klienter først får tildelt en forbindelse til db og derefter forespørger. Skal flere klienter også kunne skrive samtidigt? I så fald skal samtidighedspromlemmatikken også håndteres.
Avatar billede dsj Nybegynder
17. juni 2003 - 18:02 #5
RMI kan KUN anvendes java-applikationer imellem og du skal derfor sikre dig, at klienten også laves i Java.

Sockets er hurtigere end RMI (ca. 30%) idet der bruges dataplads til at pakke objekter ind osv. Vælger man så at anvende XML over sockets, udjævnes hastighedsforskellen.
Avatar billede dsj Nybegynder
17. juni 2003 - 18:04 #6
Samtidighedsproblemet i forbindelse med databasen løser du lettest ved at bruge en database der kan anvende transaktioner og derved opfylder ACID-kravende. Det gør MySQL 4.*, PostgreSQL, MS SQL-Server (ikke Access) samt alle de store distributioner i Oracle's klasse.
Avatar billede magoo20000 Nybegynder
17. juni 2003 - 18:04 #7
Andre alternativer er også Java Webservices (streaming af XML) eller CORBA. Java Webservices kan udvikles vha. Apache Axis, SUN Webservice Development kit osv.
Avatar billede magoo20000 Nybegynder
17. juni 2003 - 18:07 #8
CORBA er en model til håndtering af distribuerede objekter, på en måde som er uafhængig af sproglig implementation
Dette opnås ved at definere et fælles interface, i sproget IDL, til de metoder (og attributter) der er public
Endvidere håndterer CORBA en stor del af netværksopgaverne. Dette gøres i ORB’en (Object Request Broker). Den virker som en objekt bus gennem hvilken et objekt kan bruge andre lokale eller distribuerede objekter.
ORB’en er ansvarlig for at finde og dirigere requests til et serverobjekts implementering, og sende svaret tilbage til klienten
Avatar billede arne_v Ekspert
17. juni 2003 - 18:15 #9
multiple clients----server appplication----database

er en meget anvendt arkitektur.

Jeg vil i de efterfølgende antage, at du bruger en standalone
server applikation ikke komponenter der skal køre i en container
(altså ikke noget J2EE). Ellers er det nemlig noget helt andet.

server appplication----database vil formentlig bruge JDBC (SQLJ
er aldrig slået igennem). Hvis applikationen skal bruge databasen
meget, så bør du lave en database connection pool.

For multiple clients----server appplication er som du allerede
har fundet ud af de 2 mest naturlige valg: sockets og RMI. RMI
er rimeligt nemt, da du får en masse funktionalitet forærende
(serialisering, multithreading etc.), men til gengæld er det ikke
så egnet til meget store data mængder f.eks. fil upload og download
samt at RMIRegistry og porte godt kan drille lidt.

Serveren skal naturligvis være multithreaded, så flere requests kan
processes i parallel. RMI sørger for det automatisk. Med sockets
skal du selv kode det. Men det er dog ikke så svært.
Avatar billede javaknold Nybegynder
17. juni 2003 - 18:16 #10
Det jeg vil lave er en Client GUI -> Server ->DBServer
Alt laves i Java

Men i denne del af java er jeg ikke bare lidt grøn men meget GRØN

Og i skyder løs som bare pokker, jeg skal altså lige sunde mig lidt oven på det her.
Avatar billede magoo20000 Nybegynder
17. juni 2003 - 18:21 #11
Så brug RMI mellem client/server og JDBC mellem server og db.
Avatar billede arne_v Ekspert
17. juni 2003 - 18:21 #12
Kommentarer til nogle af de andre svar:

* man kan godt bruge porte under 1024, men på seriøse operativ-systemer
  kræver det specielle priviligier

* en connection pool løser faktisk samtidigheds problemet, da kun en client
  kan have den samme connection ad gangen

* transaktioner løser ikke problemet med samtidig access stil en
  connection eller samtidig access til en database record men
  problemet med multiple SQL sætninger der afhænger af hinanden

* Web Services er normalt container baseret
Avatar billede magoo20000 Nybegynder
17. juni 2003 - 18:22 #13
Du kan jo også overveje, om db'en skal ligge på samme fysiske maskine som application server - det er et spørgsmål og to eller tre fysiske lag i arkitekturen.
Avatar billede javaknold Nybegynder
17. juni 2003 - 18:53 #14
Jeg vender tilbage i morgen, skal lige have tygget lidt på det !!!

Så har jeg nok flere spørgsmål.
Avatar billede arne_v Ekspert
11. juli 2003 - 19:02 #15
javaknold>

Er du kommet videre ?
Avatar billede javaknold Nybegynder
11. juli 2003 - 19:30 #16
Jeg sidder faktisk her med totalt røde ører og en ekstremt dårlig samvittighed,
selv kender jeg ikke noget værre, end når folk siger de vender tilbage og så sker der bare ikke en meter.

Jeg har ikke haft tid til, at kigge nærmere på det siden den dag, jeg stillede spørgsmålet og har faktisk overvejet, om jeg bare skulle dele nogle point ud, og så lade det være det.

Tror dog jeg vælger at sætte mig ind i det, indenfor de næste par uger og så vende tilbage - det var nok for tidligt jeg stillede spørgsmålet.

Håber i har mod på at fortsætte, når jeg bliver mere klar til at gå i gang med opgaven.
Avatar billede arne_v Ekspert
11. juli 2003 - 19:32 #17
No problemo.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester