Streaming request, response를 활용한 WebSocket 없는 양방향 통신 및 라이브러리(채팅 예제 포함)
Streaming request가 Chrome 105부터 가능해집니다. Streaming request를 활용하면 클라이언트에서 서버로 데이터를 스트리밍할 수 있습니다. 즉 전체 데이터의 길이가 확정되지 않은 상태에서, 점진적으로 서버에 데이터를 보낼 수 있습니다.(HTTP/2 서버 필요) 한편, Streaming response는 전부터 사용 가능했던 기능으로, 서버로부터 데이터를 점진적으로 스트리밍받을 수 있는 기능입니다. 이 두 기능을 하나의 HTTP 커넥션에 같이 사용하는 것은 현재 브라우저의 구현 한계로 인해 불가능하지만, 업로드용과 다운로드용 커넥션을 각각 설정해 총 두 커넥션을 사용하는 경우 WebSocket 없이도 서버와 클라이언트 사이의 양방향 통신이 가능합니다. 채팅 예제
하지만 위 예제에는 문제가 있습니다. Streaming request, response는 TCP와 같이 메시지의 순서를 보장하지만 각 메시지의 구분은 보장하지 않습니다. A와 B를 각각 보냈어도 받는 쪽에서는 AB로 받을 수 있는 것입니다. 그래서 TCP 위에 메시지들을 구분하기 위한 프로토콜을 구축하듯이, Streaming request나 response를 사용할 때에도 메시지를 구분하기 위한 프로토콜을 구축할 필요가 있습니다. 그래서 만들어진 프로토콜 라이브러리가 sibal입니다. sibal은 Stream API의 TransformStream을 활용해 만들어져서, 웹이나 노드 환경에서, Stream이 있는 곳에 곧바로 연결해 메시지의 구분이 보장되는 통신환경을 편리하게 구축할 수 있습니다. sibal을 사용한 채팅 예제