본문 바로가기

전체 글

(922)

서버 만들때 읽어 볼 글 - non-blocking I/O , Thread Pool 제목 : Re: chatting프로그램 가이드 글쓴이: 신형주(shin7688) 2002/10/11 02:58:47 조회수:141 줄수:88 자바 처음짜는 사람을 위한 chatting프로그램 가이드 네트웍은 모르더라도 OOP는 필요한것 같구요. Chat이란 사용자가 connection을 시작해서 이 세션이 끊어질때까지 문자를 주고 받는것을 의미 합니당. 서버 프로그램에서는 기초적으로 프로그램을 볼께요. 최고의 서버는 fault-tolerance, load-balancing, sessioning을 제공하는 솔루션이어야 하지만 처음에는 간단한 데이타 교환이 좋지요. 기초: 1.클라이언트가 구동하기전에 서버는 구동해야 하죠. 2.커넥션을 얻기 위해서 기다려야 되고 물론 port(당연 한대의 컴퓨터를 기준으로요..
TCP/IP Socket 프로그램 구현시 고려사항 http://www.javaservice.net/~java/bbs/read.cgi?m=devtip&b=javatip&c=r_p&n=1009171849 제목 : TCP/IP Socket 프로그램 구현시 고려사항 글쓴이: 이원영(javaservice) 2001/12/24 14:30:49 조회수:6479 줄수:96 TCP/IP Socket 프로그램 구현시 고려사항 CPU나 메모리와 같은 자원은 항상 한계점이 있기 마련입니다. 그 한계점에 도달했을 때, 어떻게 동작케 하도록 조정하겠느냐의 문제가 매우 중요합니다. 이러한 고민의 여부가 때론 프로그래머의 수준이 실무적인 경험이 있느냐 그렇지 않느냐의 차이로 나타납니다. TCP/IP Socket 프로그램을 짤때, 크게 수준에 따라 네가지 방법이 있습니다. 첫째, S..
쪽팅 클라이언트 - 자바 스크립트가 실행할 메소드는 public로 잡을것 자바 스크립트가 실행할 메소드는 public로 잡아야 함. http://mjava.net 188: //sleep 할 시간을 초기화,, 쪽지가 도착했을때, 쪽지를 보냈을때..실행.. 189: //javascript에서 호출함으로 반드시 public이어야 함.. 190: public void initTime() { 191: this.startTime = System.currentTimeMillis(); //시작시간을 현재시간으로 설정 192: this.dtime = this.checkNewMemoTime; //기본 checkNewMemoTime을 thread의 dtime(sleep)으로 설정 193: 194: thread.interrupt(); 195: }
쪽팅 클라이언트 - 스레드 실행 간격 0.2초 가능 스레드를 실행 시키는 간격이 0.2초 정도라면 거의 cpu를 소모 하지 않는다고 함. 대신 쪽지 클라이언트일때만 가능할 것임. ( 서버라면 순식간에 들어 오는 사람을 모두 처리해야 함으로 ) ( 채팅 클라이언트라도 빠른 속도를 위해서라면 ? 잘 모르겠음 ) http://mjava.net 114: public void run() { 115: System.out.println("webclient run"); 116: int ttime = 200; //thread sleep time; 117: int mtime = 0; //memo time; 118: int ctime = 0; //check time; 119: while(!isStop) { 120: try { 121: 122: // 0.2초단위로 쓰레드가 쓰..
서버를 만들때 주의해야 할점 - 메세지 보내기전 클라이언트 확인하기 서버에서 클라이언트로 메세지를 보내기 전에 먼저 접속이 현재 제대로 이루어져 있는지 확인해 보아야 한다. /** * 메세지를 모든 다른 클라이언트에게 보낸다. */ private void broadcast(Client fom, String message) { // 연결이 끊겨진 클라이언트들을 잠시 저장하기 위해 사용 Vector zombies = new Vector(5); Enumeration enum = clients.elements(); while ( enum.hasMoreElements() ) { // 클라이언트 객체가 발송자인 경우 무시 if (client == from) { continue; } if (client.socket == null) { zombies.addElement(client);..
서버를 만들때 주의해야 할점 - 블로킹 메소드 사용 금지 채팅 서버의 경우 처럼 쓰레드별로 클아이언트의 소켓 연결을 전담해서 처리하면 프로그램은 아주 간단해 진다. 하지만 쓰레드를 생성하는 것이 프로세스의 생성보다는 훨씬 가벼운 일이지만, 많은 클라이언트의 동시 접속을 처리하기 위해 네트웍 연결마다 쓰레드를 생성하게 되면 메모리 등 리소스 오버헤드가 커지게 된다. 이런 경우에는 쓰레드 하나에 몇 개의 네트웍 연결을 할당하는 방식으로 개선할 수 있다. 쓰레드 하나가 여러 개의 네트웍 연결을 처리하려면 이 채팅 서버처럼 readLine()과 같은 블로킹 메소드를 사용하면 메시지가 들어올 때까지 이 메소드에서 블록되어 버리기 때문에 그동안 다른 네트웍 연결을 처리할 수가 없다. 따라서 이런 경우에는 넌블로킹 메소드인 InputStream의 available() 메소..
채팅만들때 유령방지법 서버에서 유령사용자 처리는 클라이언트의 일방적인 PING (Not ICMP but send dummy byte)을 사용하도록 함.
IRCD를 이용한 채팅 서버 만들기 irc를 이용해서 서버를 만들고, 클라이언트는 java applet 과 javascript로 만들어 낸다. irc에 대한 자료는 나중에 추가하도록 한다. 세이클럽, cafe24 등이 irc 기반 이라고 함