XML 데이터 수신시에 끝을 어떻게 아나요?
글쓴이: rbosc / 작성시간: 화, 2010/07/06 - 8:07오후
안녕하세요.
매일매일 와서 글만 보고 가다가 질문이 있어 이렇게 올립니다.
서버 / 클라이언트 통신 프로토콜로 XML 을 사용하려고 합니다.
복잡한 프로토콜은 아니고, 클라이언트에서 데이터 요청에 대하여 서버에서 응답하는 형태이고
TCP 로 연결하여 연결을 유지하면서 데이터 송/수신을 하려고 했습니다.
언어는 자바를 사용했습니다.
builder.parse() 에 socket.getInputStream() 으로 얻은 InputStream 을 그대로 연결했는데요
클라이언트에서 XML 데이터를 전송하여도 그 끝을 몰라서 계속 수신 대기를 하는 것 같습니다.
물론 클라이언트에서 XML 데이터 전송 후, socket 을 끊으면 parse() 에서 빠져나오지만,
끊지 않으면 계속 수신하다가 에러가 납니다.
TCP 연결을 끊지 않으면서 프로토콜을 XML 을 사용하는 방법을 없을까요?? ... 1
수신 길이가 불확실함으로 builder.parse() 에 바로 연결하지 않는
방식을 사용해도 비슷한 고민이 생길 듯 하는데.. 어떤 방법이 좋을까요?? .... 2
많은 조언 부탁드립니다.
아래와 같은 식으로 작성했습니다. ( in 은 외부에서 socket.getInputStream() 입니다.)
DocumentBuilderFactory factory = null; DocumentBuilder builder = null; Document doc = null; factory = DocumentBuilderFactory.newInstance(); builder = factory.newDocumentBuilder(); try { doc = builder.parse(in); } catch (Exception e) { ... }
Forums:
통신 경험이 없어 도움이 안되겠지만 root tag 검출로 끝을 인식하느거 아닌가요.
통신 경험이 없어 도움이 안되겠지만 2가지 정도 생각한것 있는데요.
첫번째는 root end tag 검출로 끝을 인식하느거 아닌가요.
예를 들면 'root'이 root tag일 경우 검출이요.
두번째는 제가 직접 사용해 본거 아니지만 저두 xml로 통신하다가 우연히 봐둔것이 있는데요.
javax.xml.stream.XMLInputFactory 의
public abstract XMLStreamReader createXMLStreamReader(InputStream stream,String encoding)
입니다. 직접 사용해본 경험이 없어서 딱히 말씀드릴것이 없네요.
초기버전이 첫번째 거로만 생각하고 구현한거라..
좋은 결과물 있으시면 공개해 주셨으면 하네요.
개인적으로 저두 xml로 통신 프로토콜 쓸려다가 head+body(?) -> 이것을 frame이라고 하나요..
하여간 이 방식으로 변경중입니다. xml이 느린거는 각오?하고 쓸려다가
구글신께 5분?정도 물어봤을때 header+xml 형태로 빠르다고 자랑하는 어떤 사이트때문에
결정적으로 맘에 두고 있다가 암호/압축 지원할려다 보니 울컥해서 감정적으로 바꾼게 되었습니다.
결론적으로 순수 xml로 통신하는 쓸만한 framework 공개해 주시면 많은 중생들이 구제될줄 아옵니다.
댓글 달기