2012-02-27 1 views
0

많은 사람들이 서버에 연결하여 인쇄물 목록을 볼 수있는 부두 서버를 실행하려고합니다. 나는 연결하는 모든 사람들이 같은 가치관을 보길 원합니다.부두 서버의 여러 커넥터

예를 들어 시간을 기록하는 단일 목록이 있고 5 명 정도의 사람들이 내 웹 사이트 (예 : localhost : 8080/시간)에 가서 원하는 시간을 볼 수있게하려면 30 초마다 어떻게 설정해야합니까?

내가 무엇을 가지고 : 나는 부두를 사용하고

  • .
  • 은 내가이
이벤트가 일어난 경우 (즉, 30 초 통과)라고 화면에 기록 AbstractHandler
  • 를 확장 내 자신의 핸들러를 생성
  • 8080 포트에 바인딩 된 단일 서버를 생성
  • 두 사람이이 페이지에 연결하면 매 순간마다 인쇄본이 보입니다. 즉, 다른 모든 이벤트가 발생할 때마다 각 사람이 알 수 있도록 앞뒤로 전환합니다.
  • 3 명이 연결되면 연결된 두 사람 만 계속 연결할 수 있습니다. 세 번째는 아무런 결과도 얻지 못한다. t를 화면에 표시합니다.

그렇게하려는 시도가 실패하고 내 문제의 해결책인지 이해할 수 없으므로이 커넥터를 설정하지 않았습니다.

도움이 될만한 사람이 있으면 누구나 아이디어를 가지고 있지만 내가하는 일에 대한 설명이 필요하면 더 자세한 정보를 제공하게되어 기쁩니다.

감사합니다.

처리기 코드 :

@Override 
public void handle(String target, Request request, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException, ServletException 
{ 

httpServletResponse.setContentType("text/html;charset=utf-8"); 
httpServletResponse.setStatus(HttpServletResponse.SC_OK); 

request.setContextPath("/time"); 
request.setHandled(true); 

while (true) { 

    synchronized(Main.list) { 
     while (!Main.list.isEmpty()) { 
       Double time = Main.list.get(0); 
       httpServletResponse.getWriter().println("<h1>The time now is " + time + "</h1>"); 
       httpServletResponse.flushBuffer();  
       Main.list.remove(0); 
     } 
     try { 
       Main.list.wait(); 
     } catch (InterruptedException e) { 
       e.printStackTrace(); 
     } 
    } 

} 

그래서 목록 객체 (즉, 통지) 30 초마다 내가 일어나 메인 클래스에 정의 된 정적 ArrayList를합니다. 다행히도 이것은 누군가 내가 핸들러에서 무엇을 바꿀 수 있는지 확신 할 수 없다는 것을 더 잘 이해할 수있게 도와 줄 것입니다 ...

+0

난 당신이 몇 가지 코드를 게시 할 필요가 있다고 생각 핸들러에서 볼 것을 본질적으로 아무 문제가 없습니다. 커넥터를 가지고 놀 필요가 없어야합니다. 문제는 핸들러를 설정하는 방법에 거의 틀림없지 만, 설명으로는 우리가 충분히 작업 할 수있는 것은 아닙니다. – Tim

+0

@Tim 방금 처리기 코드를 포함하도록 질문을 편집했습니다. 그것이 당신에게 어떤 아이디어라도 주시면 알려주세요. 시간을내어 주셔서 감사합니다! – abroad

답변

0

어떻게 처리기에 클라이언트를 공급합니까? 브라우저는 특정 호스트에 대한 연결 수에 제한이 있습니다.

제외하고는 일반적으로 이상한 일이되는 핸들러 코드가