Kim Jinung
Java Socket Programming 본문
Java Socket Programming
Client-Server 구조에서의 소켓 프로그래밍 흐름 예시다.
Server example
import java.io.*;
import java.net.*;
public class MyServer {
public static void main(String[] args){
try{
ServerSocket ss=new ServerSocket(6666);
Socket s=ss.accept();//establishes connection
DataInputStream dis=new DataInputStream(s.getInputStream());
String str=(String)dis.readUTF();
System.out.println("message= "+str);
ss.close();
}catch(Exception e){System.out.println(e);}
}
}
Client example
import java.io.*;
import java.net.*;
public class MyClient {
public static void main(String[] args) {
try{
Socket s=new Socket("localhost",6666);
DataOutputStream dout=new DataOutputStream(s.getOutputStream());
dout.writeUTF("Hello Server");
dout.flush();
dout.close();
s.close();
}catch(Exception e){System.out.println(e);}
}
}
Apache Kafka
소켓 프로그래밍을 보면 가장 먼저 떠오르는 게 메시지 큐다. 카프카는 소켓 프로그래밍 인터페이스 위에서 프로듀서 - 브로커 - 컨슈머 관계로 메시지를 주고 받는다. 여기서 카프카의 핵심은 브로커가 프로듀서로 부터 전달 받은 데이터를 효율적으로 저장하고, 가능한 빠르게 토픽에 해당하는 데이터를 찾아서 프로듀서에 넘겨주는 것일 것이다. 카프카는 데이터를 디스크에 저장하는데, 좋은 퍼포먼스를 보여준다. 이게 가능한 이유는 페이지 캐시를 사용해서 액세스가 빈번한 데이터를 메모리 영역에 캐싱하기 때문이다.
페이지 캐시는 메모리 페이지 개념과 밀접하다. 운영체제는 프로그램을 실행할 때, 모든 코드를 통채로 메모리에 로드하지 않고 꼭 필요한 영역만 메모리에 올린다. 이때 메모리는 페이지라는 영역으로 구분되어 있다. 프로세스를 실행하기 위해 반드시 필요한 코드만 페이지에 올려두고 사용하다가, 필요한 페이지가 없으면 페이지 폴트가 발생한다. 이 시점에 디스크로부터 필요한 영역을 메모리의 페이지에 로드한다. 이것이 가상 메모리 기법이다. 카프카는 가상 메모리 시스템에서 물리 메모리의 일부(페이지)를 할당 받아서 액세스가 빈번한 데이터를 페이지에 캐싱한다. 이러한 방식으로 빠른 응답 시간을 제공한다고 한다.
Reference
https://www.javatpoint.com/java-networking
Java Networking - javatpoint
Java Networking tutorial with InetAddress, URL, java networking terminology, advantage of java networking, URLConnection, Socket, ServerSocket, DatagramPacket and DatagramSocket examples.
www.javatpoint.com
'Language > Java' 카테고리의 다른 글
Java LocalTime (0) | 2023.07.04 |
---|---|
Arrays class's asList method (0) | 2023.05.20 |
Multithreading in Java (0) | 2023.05.17 |
Exception Handling in Java (0) | 2023.05.17 |
Java Collection framework (0) | 2023.05.16 |