I C/C++ når du bruger #include, siger du til preprocesseren at den skal kopiere indholdet fra filen ind. Når du skriver import i Java siger sker der ikke sådan en kopiering, i stedet fortæller du compileren/runtimen hvor den finder afhængigheder henne.
Lad os sige du står i mappen X i kommandolinjen. I X har du mappen A og B, samt jar-filen other-library.jar. Mappen B og jar-filen er tredjepartsbiblioteker som du bruger. Der ser sådan her ud:
X\A\org\wunderstrudel\webstuff\Program.java
X\A\org\wunderstrudel\webstuff\Optimisme.java
X\B\org\third-party\AwesomeWebSocketServer.java
X\B\org\third-party\AwesomeWebSocketServer.class
X\other-library.jar
Du vil gerne køre X\A\org\wunderstrudel\webstuff\Program.java som har en main-metode. Inde i Program.java har du linjerne:
package org.wunderstrudel.webstuff;
import org.third-party.*;
import org.venture.insanity.*;
Den første siger hvilken pakke (package) Program-klassen hører til og skal passe med mappestrukturen. Den anden linje med import referer til at du har brug for java kode i pakken org.third-party (som ligger i X\B), og den tredje at du har brug for kode fra en anden pakke (ligger i .jar-filen). Først skal du kompilere dine .java filer til .class filer, hvilket allerede er gjort for X\B\*. Men dit kode i X\A bruger X\other-library.jar samt kode fra X\B så du skal huske at sætte din
classpath.
Så du kører kommandoen
javac -classpath "X\B;other-library.jar" "X\A\org\wunderstrudel\webstuff\*.java"
for at kompilere din .java filer til .class filer (på Mac/Linux skal du bruge forward slash og ':' i stedet for ';' som separator).
Nu har du alt koden kompileret og vil gerne køre det. Så skal .class path være det samme, men nu også inkludere dit kode Program.java, og du skal skrive stierne til pakkerne i 'classpath':
java -classpath "X\A;X\B;other-library.jar" org.wunderstrudel.webstuff.Program
Baseret på classpath og mappestrukturen finder java og kører dit program.
Dette kan godt blive bøvlet og vi har egentlig computere til at automatisere sådan noget for os, så find en måde at automatisere det på i Sublime. Jeg bruger selv Sublime, også til C++, men til Java udvikling foreetrækker jeg et IDE.
Til dit andet spørgsmål:
Det smarte ved WebSockets er det giver tovejskommunikation hvilket almindelig HTTP ikke giver. Hvad der ville være mest effektivt afhænger af dine behov. Men givet at du overvejer WebSockets, er det som dan siger bedre at bruge en asynkron teknologi som f.eks. node.js. En typisk PHP/Apache kombo, f.eks., er bedre til cpu-tunge requests. Du har X-handlers: hver handler kan acceptere et request, laver noget data-behandling, sende et svar, og er så klar til et nyt request. Men hvis forbindelserne varer længe, som med WebSockets, bliver alle dine handlers hurtig optaget og ingen kan forbinde. Dette problem har node.js ikke fordi det fungerer på en anden måde, og kan derfor have flere tusinde forbindelser på samme tid. Du kan dog også finde servere med samme principper some node.js i andre sprog, f.eks. Netty til Java.
Indlæg senest redigeret d. 17.02.2017 18:11 af Bruger #14645