클라이언트에서 바이트 송수신 시, 아래처럼 간단하게 구현할 수 있도록 유틸을 만들어 봄 10.10.10.1:10090으로 요청 바이트 송신 후, 12바이트 수신 ClientSocketUtils.request("10.10.10.1", 10090, sendBytes, in -> in.read(12)); 10.10.10.1:10090으로 요청 바이트 송신 후, 헤더 5바이트 수신 후 헤더에 지정된 길이만큼 읽기 ClientSocketUtils.request("10.10.10.1", 10090, sendBytes, LENGTH_HEAD_RES_BODY_RECEIVER.apply(5)); 개선된 ClientSocketUtil public class ClientSocketUtils { private static f..
socket connection timeout 랑 read timeout 설정 가능한 클라이언트용 Socket util만들어보기 connection time => 접속 대기 시간 socket.connect(new InetSocketAddress(host, port), 3000); 3초간 접속안되면 SocketTimeoutException 발생 read timeout ==> 응답 대기 시간 socket.setSoTimeout(3000); 3초동안 응답(패킷수신)이 없을 경우 SocketTimeoutException 발생 ClientSocketUtil 기본 connectionTimeout 3초, readTimeout 3초 public class ClientSocketUtils { private static ..
volatile은 멀티 스레드 프로그래밍에 사용되는 키워드입니다. 스레드는 실행되고 있는 CPU메모리 영역에 데이터를 캐싱합니다. 따라서 멀티 코어 프로세서에서 다수의 스레드가 변수 a를 공유하더라도 캐싱된(갱신) 시점에 따라 데이터가 다를 수도 있습니다. 그리고 캐싱된 데이터가 언제 갱신되는지 정확히 알수 없습니다. 멀티코어 환경에서 스레드1, 2가 변수a(counter 성격의 가변 데이터)를 공유하고 있다고 가정해 봅시다. 1번 스레드가 a=2를 할당한 이후에 2번 스레드가 a를 읽더라도 가장 최신값 2가 아닌 이전에 캐싱된 값을 읽어올 수 있습니다. 이런 경우 volatile키워드를 사용하여 CPU메모리 영역에 캐싱된 값이 아니라 항상 최신의 값을 가지도록 메인 메모리 영역에서 값을 참조하도록 할 ..
Hikari 소스를 까 보던 중 동기화와 관련된 좋은 코드가 있어서 소개합니다. 그전에 일단 DataSource에 대해서 좀 알아보겠습니다. DataSource를 사용하면 getConnection메소드를 통해 커넥션을 얻어 옵니다. public interface DataSource extends CommonDataSource, Wrapper { Connection getConnection() throws SQLException; .. 보통 DB당 DataSource 객체를 하나만 생성하기 때문에 DataSource는 다수의 스레드에 의해 공유됩니다. 따라서 커넥션을 얻기 위해 getConnection메소드를 호출할 때마다 스레드 간 경합이 발생하게 됩니다. 그런데 getConnection메소드에는 커넥션..
람다식이 일반화되면서 Optional을 사용한 코드를 많이 보게 됩니다. Optional을 사용하지 않으면 왠지 투박해보이고 레거시한 개발자가 된거 같습니다. ? 1. Optional은 기존의 null처리를 대체하기 위해 나온 것인가? 자바 API에 보면 다음과 같이 나옵니다. Optional is primarily intended for use as a method return type where there is a clear need to represent "no result,"...... "Optional은 주로 결과값 없음을 명확하게 표시할 필요가 있는 return 유형으로 사용하기 위한 것..." 즉, null이 리턴될 수도 있다는 것을 인지시키고 npe를 방지하기 위해 사용하는 것입니다. 이것..
ThreadPoolExecutor보다 사용하기 쉬운 고수준API들이 많기 때문에 굳이 ThreadPoolExecutor을 사용할 일은 잘 없지만 ThreadPoolExecutor을 알아두면 고수준 스레드풀 API를 사용하는데 도움이 되죠 ~ 일반적으로 ThreadPoolExecutor 생성 시 아래와 같이 선언합니다. 1 new ThreadPoolExecutor(2, 4, 60, TimeUnit.SECONDS, new LinkedBlockingQueue()); cs 위와 같이 생성하면 일단 스레드를 2개 만들어 두고 스레드가 부족하면 최대 4개까지 만들다가 더 이상 작업을 할당할 스레드가 부족하게 되면 큐에 대기작업이 등록될거라고 생각할수 있습니다. (저는 그렇게 생각했더라는 ... 큐의 매개변수가 Bl..
- Total
- Today
- Yesterday
- 바이트 기반 서버
- socket connection timeout
- 자바 클라이어트 소켓
- client socket util
- 사천성 알고리즘
- 사천성 게임
- 자바 전문서버
- 클라이언트 소켓 유틸
- 자바 전문통신
- java socket util
- 디자인 패턴
- 구성
- 추상 팩토리 패턴
- java socket
- 자바 온라인 사천성
- 자바 TCP 서버
- 클라이언트 소켓
- 소켓통신 프레임워크
- RedisAutoConfiguration
- netty
- 자바소켓
- 자바 tcp
- 자바 소켓통신
- 상속과 구성
- 소켓통신
- socket readtimeout
- 소켓 유틸
- 자바 사천성
- 자바 동기화
- neso
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |