24. marts 2002 - 11:16Der er
7 kommentarer og 1 løsning
Thread kører Socket & ServerSocket...
Hej alle Java programører.. Jeg har et problem. Jeg er iang med at lave en server med ServerSocket-klassen. Ok, hvad gør jeg: Starter en ny Thread med metoden run()... som kører min procedure 1. gang... Den socket som lytter til min port, skal jo helst lytte heletiden, så derfor laver jeg et loop, men hvad sker der så??? Den trækker resourcer på comp'en... BIG TIME... Why? og hvordan laver jeg det så?
Din server bruger vel accept metoden på ServerSocket klassen til at lytte på porten indtil en forbindelse kommer. Der får du en Socket returneret og du kan så servicere denne i en tråd. Dette burde ikke sluge megen cpu tid. Er det sådan du griber tingene an?
carstenknudsen << Ja, det er præcis hvordan den kører... men efter man har modtaget en Socket, skal jeg så lytte på denne. Det har jeg gjort således: while ( socket.available() < 0 ) { } Det er dette som jeg tror trækker alle resourcerne...
Efter at du har modtaget en socket fra accept metoden skal du ikke lytte mere, så skal du bare modtage og sende de beskeder som din protokol nu foreskriver. Jeg går udfra at du ved hvad du kan forvente af information fra både klient og server side.
Applikationen skal bruges til chat. Det er ikke noget problem at sende beskeder gennem Socket, men problemet er jeg jo ikke ved hvornår der modtages beskedder gennem den. Derfor må jeg checke med motoden (socket.available()) heletiden, for at se om der skulle være beskeder på linien. Dette må jeg jo gøre med et loop, eller hva? Og det er der problemet ligger...
Hvis det er strenge som der sendes kan du jo bare læse dem, så venter den selv til der kommer input. InputStream is = ...; // fra Socket InputStreamReader isr = new InputStreamReader( is ); BufferedReader reader = new BufferedReader(isr); String s = reader.readLine(); readLine vil så returnere når der er noget at returnere.
Java burde ikke være for langsom til større programmer; husk at så snart du kører noget med nettet er der mange andre faktorer der er med til at bestemme svartider, det har ikke kun med dit program at gøre.
I know... Jeg ved godt hvilke faktorer som har betydninger, og alligevel syntes jeg generelt java programmer kører for langsomt... Det har selvfølig meget indflydelse, at bytecode'en compiles runtime, via VM, men jeg syntes det sløver for meget...
Synes godt om
Ny brugerNybegynder
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.