2017 년 12 월로, 웹 소켓은 (실제적으로) 모든 브라우저에서 지원되며 그 사용은 매우 일반적입니다.
그러나 이것이 웹 소켓이 특히 HTTP / 2 적응이 증가함에 따라 AJAX를 적어도 완전히 대체하지 못했음을 의미하지는 않습니다.
짧은 대답은 AJAX는 여전히 웹 소켓을 사용하는 경우에도 대부분의 REST 애플리케이션에 유용하다는 것입니다. 그러나 신은 세부 사항에 있습니다.
폴링에 대한 AJAX?
폴링 (또는 긴 폴링)을 위해 AJAX를 사용하는 것은 소멸되고 있습니다. 그러나 두 가지 좋은 이유 (주로 작은 웹 앱의 경우)로 여전히 사용 중입니다.
많은 개발자들에게 AJAX는 특히 백엔드 코딩 및 디자인과 관련하여 코딩하기가 더 쉽습니다.
HTTP / 2를 사용하면 AJAX (새로운 연결 설정)와 관련된 최고 비용이 제거되어 AJAX 호출이 특히 데이터 게시 및 업로드에있어 성능이 뛰어납니다.
그러나 Websocket 푸시는 AJAX보다 훨씬 우수합니다 (헤더를 다시 인증하거나 재전송 할 필요가없고 "데이터 없음"왕복 등이 필요 없음). 이것은 여러 번 논의 되었습니다.
REST를위한 AJAX?
AJAX의 더 나은 사용법은 REST API 호출입니다. 이렇게하면 코드 기반이 간소화되고 Websocket 연결이 차단되지 않습니다 (특히 중간 크기의 데이터 업로드에서).
REST API 호출 및 데이터 업로드에 AJAX를 선호 하는 몇 가지 강력한 이유가 있습니다 .
AJAX API는 실제로 REST API 호출을 위해 설계되었으며 매우 적합합니다.
AJAX를 사용한 REST 호출 및 업로드는 클라이언트와 백엔드에서 코딩하기가 훨씬 쉽습니다.
데이터 페이로드가 증가함에 따라 메시지 조각화 / 멀티플렉싱 논리가 코딩되지 않으면 Websocket 연결이 차단 될 수 있습니다.
단일 Websocket send
호출 에서 업로드가 수행 되면 업로드가 완료 될 때까지 Websocket 스트림을 차단할 수 있습니다. 이렇게하면 특히 느린 클라이언트에서 성능이 저하됩니다.
일반적인 디자인은 Websocket을 통해 전송되는 작은 bidi 메시지를 사용하는 반면 REST 및 데이터 업로드 (클라이언트에서 서버로)는 AJAX의 사용 편의성을 활용하여 Websocket이 차단되지 않도록합니다.
그러나 대규모 프로젝트에서는 Websocket이 제공하는 유연성과 코드 복잡성과 리소스 관리 간의 균형이 Websocket에 유리하게 균형을 이룰 것입니다.
예를 들어, Websocket 기반 업로드는 연결을 끊고 다시 설정 한 후 큰 업로드를 재개 할 수있는 기능을 제공 할 수 있습니다 (업로드하려는 5GB 동영상을 기억하십니까?).
업로드 조각화 로직을 코딩하면 중단 된 업로드를 재개하기가 쉽습니다 (어려운 부분은 코딩하는 것임).
HTTP / 2 푸시는 어떻습니까?
HTTP / 2 푸시 기능이 웹 소켓을 대체하지 못하거나 대체 할 수 없다는 것을 추가해야합니다.
이것에 대해서는 이전 에 논의 했지만 단일 HTTP / 2 연결이 전체 브라우저 (모든 탭 / 창)에 제공되므로 HTTP / 2에 의해 푸시되는 데이터는 자신이 속한 탭 / 창을 알지 못합니다. Websocket의 데이터를 특정 브라우저 탭 / 창으로 직접 푸시하는 기능을 대체 할 수있는 기능이 없습니다.
Websocket은 소규모 양방향 데이터 통신에 적합하지만 AJAX는 특히 많은 페이로드 (업로드 등)를 고려할 때 여전히 많은 장점을 가지고 있습니다.
그리고 보안?
글쎄, 일반적으로 프로그래머에게 더 많은 신뢰와 통제가 제공 될수록 도구는 더욱 강력 해지고 보안 문제는 더욱 커집니다.
보안은 브라우저의 코드에 내장되어 있기 때문에 AJAX는 본질적으로 우위를 차지할 것입니다 (때로는 의심 스럽지만 여전히 존재합니다).
반면에 AJAX 호출은 "중간자 공격"에 더 취약한 반면 웹 소켓 보안 문제는 일반적으로 보안 결함을 도입 한 응용 프로그램 코드의 버그입니다 (일반적으로 백엔드 인증 논리는 이러한 부분을 찾을 수 있습니다).
개인적으로 나는 Websockets가 약간 더 나쁘다고 생각되면, 특히 당신이하는 일을 알고있을 때 이것이 큰 차이가 아니라고 생각합니다.
내 겸손한 의견
IMHO, REST API 호출 이외의 모든 용도로 웹 소켓을 사용합니다. 빅 데이터 업로드 가능하면 조각을 만들어 웹 소켓을 통해 보냅니다.
IMHO의 폴링은 불법이며 네트워크 트래픽 비용은 끔찍하며 Websocket 푸시는 새로운 개발자도 쉽게 관리 할 수 있습니다.