티스토리 뷰
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @SpringBootApplication public class FisMonitoringApplication { private static final Logger logger = LoggerFactory.getLogger(FisMonitoringApplication.class); public static void main(String[] args) { ApplicationContext ctx = SpringApplication.run(FisMonitoringApplication.class, args); // /** * @description Jetty Websocket Server Start * **/ MonitorServer jettyServer = ctx.getBean(MonitorServer.class); jettyServer.start(); } } | cs |
Monitoring에서 jettyServer 로 monitorServer를 메모리상에 올립니다.
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 32 33 34 35 36 37 38 39 40 | @Service public class MonitorServer { private final Logger logger = LoggerFactory.getLogger(MonitorServer.class); // class변수 기준- 메소드안에 있는 것 or 메소드 안에 자주 쓰이는 것 (?) private Server server; private ServerConnector connector; private final int PORT = 13702; private ServletContextHandler context; private ServletHolder holderEvents; public MonitorServer(){ this.server = new Server(); this.connector = new ServerConnector(server); connector.setPort(PORT); } public void start(){ this.server.addConnector(connector); // '/' 에서 이 응용 프로그램의 기본 응용 프로그램 'context'를 설정 context = new ServletContextHandler(ServletContextHandler.SESSIONS); context.setContextPath("/"); server.setHandler(context); // ServletHolder 인스턴스 생성해 이벤트를 핸들할 경로를 설정 >>> ws://localhost:13702/fiopr/* holderEvents = new ServletHolder("fiopr", MonitorServerServlet.class); context.addServlet(holderEvents, "/fiopr/*"); try{ server.start(); server.dump(System.err); //예외처리 메시지 server.join(); } catch(Throwable t){ t.printStackTrace(System.err); } } } | cs |
server를 start를 하고 dump를 통한 실행될때 오류가 발생시 그 오류사항에 맞는 메세지를 띄어줍니다.
그리고 servletContextHandler
1 2 3 4 5 6 7 8 9 | @SuppressWarnings("serial") //serial 원인 없애준다. public class MonitorServerServlet extends WebSocketServlet{ @Override public void configure(WebSocketServletFactory factory){ factory.register(MonitorServerHandler.class); } } | cs |
servlet에서 serverHandler로 websocket 서버를 jsp와 연결을 맺고, 그 이후 요청받은 메세지가 같다면, 해당 데이터를 보내주는 부분이 webSocketTextHandler입니다.
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 32 33 34 35 36 37 38 39 40 | public class MonitorServerHandler extends WebSocketAdapter{ private final Logger logger = LoggerFactory.getLogger(MonitorServerHandler.class); @Override public void onWebSocketConnect(Session session){ super.onWebSocketConnect(session); logger.info("Socket Connected: " + session.getRemoteAddress().getAddress()); } @Override public void onWebSocketText(String message) { super.onWebSocketText(message); logger.info("Received TEXT message: " + message); WebSocketTextHandler msgDe = new WebSocketTextHandler(); ResultSet set = new ResultSet(); set = msgDe.MsgDecoder(message); try { getRemote().sendString(CommonGlobalVariable.m_gson.toJson(set)); //client 응답 } catch (IOException e) { logger.error("sendString Exception", e); e.printStackTrace(); } } @Override public void onWebSocketClose(int statusCode, String reason){ super.onWebSocketClose(statusCode, reason); logger.info("Socket Closed: [" + statusCode + "] " + reason); } @Override public void onWebSocketError(Throwable cause){ super.onWebSocketError(cause); cause.printStackTrace(System.err); } } | cs |
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | / Client가 요청한 message를 parsing후 키 값에 맞는 data를 ResultSet의 형태로 돌려주는 Class public class WebSocketTextHandler { private final Logger logger = LoggerFactory.getLogger(WebSocketTextHandler.class); private String cmd; private JSONObject jsonObject; // class변수이유 > json파싱 부분에서 try-catch을 전체 해줘야댐 private JSONParser jsonParser; private ResultSet set; public WebSocketTextHandler(){ this.cmd=""; this.jsonObject = new JSONObject(); this.jsonParser = new JSONParser(); this.set = new ResultSet(); } public ResultSet MsgDecoder(String message){ MonitorService fis = ApplicationContextHolder.getContext().getBean(MonitorService.class); List<ListVO> listVO = null; CntVO cntData = null; try{ jsonObject = (JSONObject) jsonParser.parse(message); cmd = (String) jsonObject.get("cmd"); } catch(ParseException e){ logger.error("json parsing Exception", e); e.printStackTrace(); } if(cmd.equals("equipStatus")){ //response try{ listVO = fis.selectList(); cntData = fis.selectCnt(); set.setList(listVO); set.setCntData(cntData); set.setResultCode(200); set.setResultMsg("success"); } catch(Exception e){ logger.error("select list Exception", e); e.printStackTrace(); set.setResultCode(300); set.setResultMsg("fail"); } } return set; } } | cs |
순서를 보자면
FisMonitoringApplication ->MonitorServer->MonitorServerServlet->MonitorServerHandler->WebSocketTextHandler textHandler에서 필요한 데이터를 db에서 가져와 VO ,mapper,service,serviceimpl 을 가는 플로우입니다.
'IT' 카테고리의 다른 글
daum 지도 infowindow오류 해결방법 (0) | 2018.10.22 |
---|---|
AWS와 WEB과 WAS (0) | 2018.10.22 |
Springboot java- Bean,logger,context (0) | 2018.10.22 |
web socket polling 요청은 왜하는가?? (0) | 2018.10.18 |
WEB SOCKET 연동 JAVASCRIPT (0) | 2018.10.17 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- server
- 오복수산
- socket
- spring
- 샌드위치
- 맛집
- MVC
- jquery
- NIKE
- Java
- 파스타
- SpringBoot
- offwhite
- 오프화이트
- 스프링
- html
- 커피
- Was
- javascript
- API
- It
- 서버
- 개발
- 웹
- 한남동
- Error
- 네트워크
- web
- 통신
- websocket
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함