H'academy
  • H'academy
  • Web
    • Back-end
      • Spring Framework
        • Spring 개발환경 구축
          • Project 생성
          • Maven 설정
          • Maven 저장소 위치 설정
          • Apache Tomcat 연동
          • Lombok 설정
        • Spring MVC Project
          • pom.xml
          • web.xml
          • root-context.xml
          • servlet-context.xml
          • DispatcherServlet
        • Controller
          • File Upload / Download
          • RestController(작성중)
        • Spring Test
          • Assert 단정문
          • Spring 환경 연동 테스트
          • MockMvc Test
        • Spring AOP
          • AOP 용어
          • Pointcut Expression
          • Filter
          • Interceptor
          • Filter vs Interceptor
          • Controller Advice(작성중)
        • Spring JDBC
          • DBCP
          • myBatis
            • ResultMap 활용
        • ETC
          • Logging
            • Tomcat Logging 설정
          • Property 관리
          • E-mail
            • Gmail 변경사항
          • Scheduler
          • Websocket
      • Spring Boot
        • STS 다운로드
        • 프로젝트 생성
        • 프로젝트 구조
        • Spring Devtools
        • Spring Controller
          • JSP 연동
            • * JSP 생성불가 문제
            • Spring Boot 3.x
          • Model
          • 요청 파라미터 처리
          • 경로 변수 처리
          • 요청 메소드
          • Redirect
          • Spring Actuator
        • Spring Boot JDBC
          • Database 정보
          • DAO Pattern
          • ORM Framework
            • myBatis
              • Mapper 생성
            • Spring Data JPA
        • Spring AOP
          • AspectJ
          • Filter
          • Interceptor
          • ControllerAdvice
        • REST API
        • Spring WebSocket
        • Send Mail
        • Logging
        • Spring Boot Test
        • Lombok
      • Java EE
        • 개발환경 구성
          • Server와 Client
          • Web Server와 WAS
        • Dynamic Web Project
      • Apache Tomcat
        • Apache Tomcat 구조
        • Tomcat User 생성
        • Tomcat Manager 설정
      • Maven
      • Jenkins
        • Installation
          • Github Webhook 설정
          • Maven 연동
        • Project setting
          • 소스 코드 관리 설정
          • 빌드 유발 설정
          • 빌드 작업 설정
      • OpenAPI(swagger)
        • swagger 2.x (legacy)
        • swagger 3.x (boot)
        • Swagger UI 꾸미기
        • SpringDoc
    • Front-end
      • HTML
        • Heading
        • <A>
        • <IMG>
        • <DIV>
        • <TABLE>
        • <FORM>
          • <INPUT>
          • <SELECT>
          • <TEXTAREA>
          • <FIELDSET>
        • List
      • CSS
        • CSS 적용 방식
          • 크기(size)
            • 픽셀(px)
          • 색상(color)
        • CSS 선택자
          • 스타일 우선순위
        • CSS 주요 속성
          • 크기 속성
            • border
            • margin
            • padding
            • box-sizing
          • 배경 속성
          • 글자 속성
            • font
            • text
          • 배치 속성
            • position
            • display
            • overflow
            • float
            • flexbox
        • CSS Reset
      • JS
        • syntax
          • let, const
          • 구조 분해 할당
          • spread operator
          • Object copy
          • this
          • module
        • jQuery
          • structure
          • function
          • ajax
            • ajax file upload
        • VueJS
          • CDN(Vue3)
            • 기본 구조
            • Vue Devtools
            • jQuery vs VueJS
            • Vue instance
              • data
                • IME issue
              • v-model
              • template
              • computed
              • watch
                • deep watch
                • vs Computed
              • methods
            • Vue directive
              • v-text
              • v-html
              • v-bind
                • v-bind style
                • v-bind class
              • v-on
                • once
                • prevent
              • v-show
              • v-if
              • v-for
          • Vue-cli 3
            • 프로젝트 구조
            • src
              • main.js
              • App.vue
              • HelloWorld.vue
            • Vue Router 4
              • History mode
              • 404 not found
              • Guard
                • beforeEach
            • Vuex
              • 이동 횟수 측정
            • axios
              • interceptor
          • Vue-electron
        • ReactJS
          • CDN(React18)
            • 템플릿 설명
            • JSX
            • render
            • Handling Events
              • onClick
              • onInput
            • Component
              • 클래스 컴포넌트
                • state
                • props
                • event
                  • Mouse
                  • Input
                • lifecycle
              • 함수형 컴포넌트
                • useState
                • useEffect
                • useReducer
                • useMemo
                • props
                • 조건부 렌더링
          • CRA
            • 자원 경로 설정
            • src 절대 경로 설정
            • react-router
            • Context API
            • Electron 설정
        • Webpack
          • NodeJS
          • Git
    • Ubuntu server
      • Jenkins
    • 테스트 도구
      • JMeter
        • Test Plan
        • Test Plan(with login)
        • Plugin 설치
    • WebRTC
  • Base Language
    • Java
      • Java 실행 과정
        • 개발 환경 구축
        • 샘플 코드 작성
        • 컴파일/실행
        • 환경 변수 설정
      • Java 초급
        • Hello world
        • 자료와 정보
        • 변수
          • 정수
            • 정수의 저장 원리
            • 정수형 변수 생성
          • 실수
            • 실수의 저장 원리
            • 실수형 변수 생성
          • 논리
            • 논리형 변수 생성
          • 문자
          • 문자열
            • 문자열 변수 생성
          • 사용자 정의 자료형
        • 연산자
          • 대입 연산
          • 부호 연산
          • 산술 연산
          • 복합 대입 연산
          • 증감 연산
          • 쉬프트 연산
          • 비트 연산
          • 비교 연산
          • 논리 연산
          • 삼항 연산
          • 변환 연산
        • 표준 입출력
          • 표준 출력
          • 표준 오류 출력
          • 표준 입력
            • Scanner 입력
        • 제어문
          • if 구문
            • 단일 조건
            • 두 가지의 조건
            • 여러 가지의 조건
          • switch~case 구문
          • while 구문
          • do~while 구문
          • for 구문
        • 랜덤(Random)
        • 배열
          • 1차원 배열
          • 2차원 배열
          • 다차원 배열
          • Sort
            • 선택 정렬
            • 버블 정렬
            • 삽입 정렬
      • Java 중급
        • 객체 지향 프로그래밍
        • 클래스
        • 인스턴스
        • 필드
        • 메소드
          • 설정(setter) 메소드
          • 반환(getter) 메소드
        • 생성자
        • 접근 제한
          • private
          • package
          • protected
          • public
        • 정적(static)
        • 불변(final)
        • 상수(constant)
        • 상속
          • this와 super의 이해
          • 멤버 변수 설정
          • 멤버 메소드 설정
          • 생성자 설정
        • 추상화
          • 추상 클래스
          • 인터페이스
        • 다형성
        • 중첩 클래스
          • 일반 중첩 클래스
          • static 중첩 클래스
          • 지역 중첩 클래스
          • 익명 중첩 클래스
      • Java API(작성중)
        • java.lang
        • java.util
        • java.text
        • java.time
        • java.io
        • java.net
        • java.sql
        • java.awt
        • javax.swing
      • Java 고급
        • 제네릭(Generic)
        • 열거형(Enum)
        • Annotation Type
          • Retention
          • Target
          • Nested Annotation
        • Java Reflection
          • Intro
          • Class
          • Field
          • Constructor
          • Method
          • Package
      • JDBC
        • 드라이버 로드
        • 연결 생성
          • JDBC Driver 유형
        • JdbcTemplate
      • Java 버전별 변경사항
        • Java 1.8
          • Lambda Expression
          • Stream API
          • java.time 패키지
        • Java 9
        • Java 12
          • switch~case
        • Java 13
          • Text Block
    • Arduino
      • 학습 준비
        • Reference
        • 아두이노 온라인 시뮬레이터
        • 전기의 이해
        • 그라운드(GND)의 이해
      • 개발 환경 구축
        • CH340 보드 설치
        • Editor 글꼴 설정
      • 아두이노 제어
        • 코드의 구성
        • 시리얼 출력
        • 디지털 출력
          • LED 출력
        • PWM 출력
        • 시리얼 입력
        • 디지털 입력
          • PIR 센서
        • 아날로그 입력
          • 온도 센서(LM35DZ)
          • 조도 센서
          • 가스 센서
        • 피에조 부저
        • 서보 모터 제어
          • 시리얼 서보 모터 제어
          • 스위치 서보 모터 제어
        • 온습도 센서(DHT-11)
        • LCD
      • 아두이노 통신
        • 블루투스(Bluetooth)
          • HC-06
            • 온도 센서 활용
          • HM-10
        • 와이파이(Wi-Fi)
          • ESP-01
            • WiFiEsp 라이브러리 추가
            • WiFiEsp 네트워크 스캔
        • 이더넷(Ethernet)
        • ArduinoJson 라이브리 사용
    • Regular Expression
  • Database
    • Oracle
      • 설치
        • SQL Plus
        • SQL Developer
        • DBeaver
        • Docker(Mac OS)
      • SQL
        • 관리자 명령
          • 사용자 관리
          • 권한 관리
          • Encoding 설정
          • 서비스 포트 설정
        • 사용자 명령
          • 테이블 관리
            • 테이블 항목 제약 조건
            • 외래키 제약조건
            • 데이터 유형
          • 시퀀스 관리
          • 데이터 관리
            • 데이터 추가
            • 데이터 조회
              • 오라클 내장 함수
              • 그룹 조회
              • Top N Query
            • 데이터 수정
            • 데이터 삭제
          • 뷰 관리
          • 인덱스 관리
          • 집합 연산
          • 테이블 조인
            • 등가 조인
            • 외부 조인
        • HR 계정
        • 기타 명령
          • 컬럼 간격 조정
      • 내보내기 및 불러오기
        • EXPDP, IMPDP
        • Docker로 실행중인 경우
      • 기타
        • 자동 세션 제거
        • Tablespace 관리
        • Unlock user
  • 면접대비
    • Q&A
      • Java
      • Database
      • Web
      • IT 일반상식
  • ETC
    • Eclipse IDE
      • 설치
      • 화면 설명
      • 환경 설정
      • 프로젝트 생성
      • 소스파일 작성 및 실행
    • Github
      • Github 계정 관리
      • Github 저장소 관리
        • Profile
        • Collaborators
        • Code
        • Issues
        • Pull requests
        • Action
          • Vue 3 Deploy Action
      • Personal Access Token
      • Git ignore 설정
        • Spring 개발용 샘플
      • Github Eclipse 연동
        • Branches
        • Project
        • Team project
          • Dynamic web project
          • Spring Boot Project
          • Branch 생성
          • Pull Request
          • Branch 보호
          • Branch 다시 생성
    • Figma
      • Team
      • Design
      • Component
    • 과정평가형
      • 실기 모의고사 1회
      • 실기 모의고사 2회
      • 실기 모의고사 3회
      • 실기 모의고사 4회
    • VScode
      • Live Server 실행 오류
      • Github 계정 변경
    • Naver ToastUI Editor
      • Editor 만들기
        • Editor options
          • File upload
      • Viewer 만들기
    • 문자 인코딩 방식
    • OBS
      • 녹화 잡음 제거 설정
    • Semantic Version
Powered by GitBook
On this page
  • Spring Websocket
  • 프로젝트 생성
  • 프로젝트 정보
  • 의존성 추가
  • WebSocket 서버 생성
  • WebSocket Server 등록
  • WebSocket Client Page 생성
  • 코드 설명
  • 웹소켓 서버
  • afterConnectionEstablished
  • afterConnectionClosed
  • handleTextMessage
  • WebSocketSession
  • CloseStatus
  • TextMessage
  • 웹소켓 서버 등록
  • 웹소켓 클라이언트
  • 웹소켓 연결 함수
  • 웹소켓 주소 생성
  • 웹소켓 연결 생성
  • 콜백 함수 설정
  • 웹소켓 종료 함수 생성
  • 웹소켓 연결 종료
  • 연결/종료 버튼 생성
  • 메세지 전송 함수 생성
  • 메세지 작성창/전송버튼 구현
  • 메세지 전송
  1. Web
  2. Back-end
  3. Spring Framework
  4. ETC

Websocket

PreviousSchedulerNextSpring Boot

Last updated 2 years ago

Spring Websocket

웹소켓(WebSocket)은 하나의 TCP 접속에 전이중 통신 채널을 제공하는 컴퓨터 통신 프로토콜이다. 전이중 통신이란 양방향 동시 통신을 말한다. HTTP 통신과는 구별되며, HTTP 통신을 기반으로 수립된다.

웹소켓을 이용하여 기존의 홈페이지에서 구현할 수 없는 실시간 처리가 가능하도록 할 수 있다. 대표적으로 구현된 예시는 다음과 같다.

  • 주식과 같은 시세 거래 사이트

  • 실시간 채팅 사이트

  • SNS의 실시간 알림

  • Gmail의 실시간 메일 수신

프로젝트 생성

프로젝트는 Spring Legacy Project → Spring MVC Project 로 생성하여 진행한다. (인터넷을 찾아보면 거의 모든 예제가 Spring boot로 되어 있다)

프로젝트 정보

프로젝트 정보는 다음과 같이 설정한다.

  • 프로젝트명 : websocket

  • Top-level package : com.hacademy.ws

의존성 추가

웹소켓을 사용하기 위해서는 다음 의존성이 필요하다.

  • org.springframework.spring-websocket : 스프링에서 웹소켓을 지원하는 라이브러리

  • com.fasterxml.jackson.core.jackson-databind : Object와 JSON string 간의 변환을 담당하는 라이브러리

pom.xml에 다음과 같이 추가한다.

<dependencies>
    <!-- 웹소켓 라이브러리 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-websocket</artifactId>
        <version>4.3.25.RELEASE</version>
    </dependency>
		
    <!-- json 제어 -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.10.1</version>
    </dependency>
</dependencies>

WebSocket 서버 생성

WebSocket 서버를 다음과 같이 생성한다.

com.hacademy.ws.server.WebSocketBasicServer.java

@Slf4j
//public class WebSocketBasicServer implements WebSocketHandler{
public class WebSocketBasicServer extends TextWebSocketHandler{
	
    /**
    * 접속 시 실행되는 메소드
    * - session : 사용자의 웹소켓 정보(HttpSession이 아님!)
    */
    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        log.info("접속");
        log.info("session : {}", session);
    }

    /**
    * 메세지 수신 시 실행될 메소드
    * - session : 사용자(전송한 사용자)의 웹소켓 정보(HttpSession이 아님!)
    * - message : 사용자가 전송한 메세지 정보
    * 		- payload : 실제 보낸 내용
    * 		- byteCount : 보낸 메세지 크기(byte)
    * 		- last : 메세지 종료 여부
    */
    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        log.info("수신");
        log.info("session : {}", session);
        log.info("message : {}", message);
    }

    /**
    * 사용자 접속 종료시 실행되는 메소드
    * - session : 사용자의 웹소켓 정보(HttpSession이 아님!)
    * - status : 접속이 종료된 원인과 관련된 정보
    */
    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        log.info("종료");
        log.info("session : {}", session);
        log.info("status : {}", status);
    }

}

WebSocket Server 등록

웹소켓은 사용자 요청에 의해 생성되므로 DispatcherServlet 설정에 작성해야 한다. 등록을 위해서는 spring-websocket 관련된 namespace가 필요하다.

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans ...>
    <beans:bean id="basicServer" class="com.hacademy.ws.server.WebSocketBasicServer"></beans:bean>
    <websocket:handlers>
        <!-- 접속주소는 ws://localhost:8080/websocket/basicServer -->
        <websocket:mapping handler="basicServer" path="/basicServer"/>
    </websocket:handlers>
</beans:bean>

WebSocket Client Page 생성

웹소켓 서버에 접속할 클라이언트 페이지를 구현한다. 주소는 /websocket/basic으로 설정한다.

com.hacademy.ws.controller.WebSocketClientController

package com.hacademy.ws.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/websocket")
public class WebSocketClientController {
	
    @GetMapping("/basic")
    public String basic() {
        return "websocket/basic";
    }
	
}

/WEB-INF/views/websocket/basic.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<script>
    //소켓 변수
    var socket;
    
    //웹소켓 접속 함수
    function connect(){
        var uri = "ws://localhost:8080/websocket/basicServer";
        socket = new WebSocket(uri);
		
        //연결이 되었는지 안되었는지 확인할 수 있도록 예약 작업(콜백)을 설정
        socket.onopen = function(){
            console.log("서버와 연결되었습니다");
        };
        socket.onclose = function(){
            console.log("서버와 연결이 종료되었습니다");
        };
        socket.onerror = function(){
            console.log("서버 연결 과정에서 오류가 발생했습니다");
        };
        socket.onmessage = function(){
            console.log("메세지가 도착했습니다");
        };
    }
    //웹소켓 종료 함수
    function disconnect(){
        socket.close();
    }
    //메세지 전송 함수 : 입력된 글자를 불러와서 서버에 전송
    function send(){
	        var text = document.querySelector("#chat-input").value;
		    if(!text){
			    return;
		    }
		
		    socket.send(text);
		    document.querySelector("#chat-input").value = "";//창 지우기
    }
</script>

<h1>Basic Websocket Example</h1>

<button onclick="connect();">접속</button>
<button onclick="disconnect();">종료</button>

<hr>
<input type="text" id="chat-input">
<button onclick="send();">전송</button>

코드 설명

웹소켓 서버

웹소켓 서버는 세 개의 메소드로 구성되어 있다. 이 메소드들은 상속받은 클래스인 TextWebSocketHandler를 통해 확인할 수 있다.

  • public void afterConnectionEstablished(WebSocketSession session)

  • public void afterConnectionClosed(WebSocketSession session, CloseStatus status)

  • protected void handleTextMessage(WebSocketSession session, TextMessage message)

afterConnectionEstablished

클라이언트와의 웹소켓 연결이 수립된 직후에 실행되는 핸들러 메소드이다. 실행 시 매개변수로 WebSocketSession이 제공되며 클라이언트 정보와 관리 명령들이 존재한다.

사용자 접속 시 서버에서 수행해야 할 작업이 있다면 이곳에서 처리한다.(ex : 사용자 등록, 접속 알림 등)

afterConnectionClosed

클라이언트와의 웹소켓 연결이 종료된 직후에 실행되는 핸들러 메소드이다. 실행 시 매개변수로 WebSocketSession과 CloseStatus가 제공되며 이는 클라이언트 정보와 종료 상태에 대한 정보를 가지고 있다.

handleTextMessage

클라이언트가 연결된 웹소켓을 통해 전송한 텍스트 메세지를 수신한 직후에 실행되는 핸들러 메소드이다. WebSocketSession과 TextMessage가 제공되며 이는 클라이언트 정보와 전송 메세지 정보를 가지고 있다.

WebSocketSession

웹소켓 세션의 정보를 제공하는 클래스. 웹소켓 연결을 통해 메세지를 전송하거나 연결을 종료할 수 있다.

CloseStatus

TextMessage

웹소켓에서 전송된 텍스트 메세지 정보를 가진 클래스. byte크기, 분할여부, payload를 확인할 수 있다.

웹소켓 서버 등록

웹소켓 서버를 등록하기 위해서는 DispatcherServlet 설정파일인 servlet-context.xml에 websocket 태그를 사용해야 한다.

<beans:bean id="basicServer" class="com.hacademy.ws.server.WebSocketBasicServer"></beans:bean>

위의 코드를 이용하여 WebSocketBasicServer를 Spring bean으로 등록하고, 아래 코드를 이용하여 WebSocket 서버로 설정한다.

<websocket:handlers>
    <!-- 접속주소는 ws://localhost:8080/websocket/basicSer -->
    <websocket:mapping handler="basicServer" path="/basicServer"/>
</websocket:handlers>

mapping에는 등록된 bean의 id를 작성하고, path에는 현재 프로젝트의 기본 웹소켓 접속주소인 ws://localhost:8080/websocket을 제외한 뒷부분의 주소를 작성한다.

따라서 basicServer의 접속 주소는 다음과 같다. ws://localhost:8080/websocket/basic

웹소켓 클라이언트

웹소켓 연결 함수

웹소켓의 연결 작업을 처리할 수 있도록 connect 함수를 생성한다.

function connect(){

}

웹소켓 주소 생성

connect 함수에 웹소켓 연결을 위한 주소 변수를 생성한다. 웹소켓의 주소는 ws로 시작한다. (sockjs를 사용하면 http로 접속이 가능하지만 지금 문서에서는 다루지 않는다)

var uri = "ws://localhost:8080/websocket/basicServer";

이식성을 높이기 위해서 다음과 같이 계산하여 작성할 수 있다.

var uri = "ws://";
uri += location.host;
uri += location.pathname.substring(0, location.pathname.indexOf("/", 2));
uri += "/basicServer";

jsp 페이지에서는 EL을 사용하여 다음과 같이 context path 계산이 가능하다.

var uri = "ws://";
uri += location.host;
uri += "${pageContext.request.contextPath}";
uri += "/basicServer";

웹소켓 연결 생성

웹소켓 연결은 다음 코드 형태로 생성이 가능하다.

var socket = new WebSocket(주소 [,옵션]);

주소는 접속 가능한 웹소켓 주소를 작성하며, 옵션은 생략이 가능하다. 예제 코드에서는 socket 변수의 활용범위를 넓히기 위하여 다음과 같이 생성하였다.

var socket;
function connect(){
    var uri = "...주소 생략...";
    socket = new WebSocket(uri);
}

다음과 같이 window에 등록하여 사용해도 된다(단, 이름 충돌에 유의해야 한다).

function connect(){
    var uri = "...주소 생략...";
    window.socket = new WebSocket(uri);
}

콜백 함수 설정

connect 함수에서 웹소켓을 생성한 뒤 다음과 같은 콜백 함수를 설정할 수 있다.

  • onopen : 웹소켓 연결이 수립된 후 실행될 함수

  • onclose : 웹소켓 연결이 종료된 후 실행될 함수

  • onerror : 웹소켓 연결 오류 발생 후 실행될 함수

  • onmessage : 웹소켓을 통해 메세지가 수신되었을 경우 실행될 함수

콜백 함수는 예약작업이라고 생각하면 이해하기 쉬우며, 필요하지 않을 경우 설정하지 않아도 된다. 이 문서의 클라이언트 예제파일에서는 console.log 함수를 이용하여 콘솔 메세지만 출력하도록 구성하였다.

//연결이 되었는지 안되었는지 확인할 수 있도록 예약 작업(콜백)을 설정
socket.onopen = function(){
    console.log("서버와 연결되었습니다");
};
socket.onclose = function(){
    console.log("서버와 연결이 종료되었습니다");
};
socket.onerror = function(){
    console.log("서버 연결 과정에서 오류가 발생했습니다");
};
socket.onmessage = function(){
    console.log("메세지가 도착했습니다");
};

웹소켓 종료 함수 생성

웹소켓을 원하는 시점에 연결 종료할 수 있도록 disconnect 함수를 생성한다.

function disconnect(){

}

웹소켓 연결 종료

웹소켓 연결 종료는 disconnect 함수에서 다음 코드로 수행한다.

socket.close();

연결/종료 버튼 생성

연결과 종료 버튼을 다음과 같이 생성하여 각각의 함수와 연결한다.

<button onclick="connect();">접속</button>
<button onclick="disconnect();">종료</button>

메세지 전송 함수 생성

웹소켓 연결 후 메세지 전송을 위하여 send 함수를 생성한다.

function send(){

}

메세지 작성창/전송버튼 구현

메세지 작성창은 input 태그로, 전송버튼은 button 태그로 구현한다.

<input type="text" id="chat-input">
<button onclick="send();">전송</button>

전송버튼을 누르면 send 함수가 실행되도록 작성한다.

메세지 전송

메세지 전송을 위해서는 입력창의 값을 알아야 한다.

var text = document.querySelector("#chat-input").value;

입력창의 값이 없을 경우는 전송하지 않는다.

if(!text){
    return;
}

실제 전송을 수행한다.

socket.send(text);

전송 후 입력창에 작성되어 있는 글자를 삭제한다.

document.querySelector("#chat-input").value = "";//창 지우기

버전은 에서 검색하여 적절한 버전을 사용한다.

웹소켓 종료 상태 코드와 원인을 제공하는 클래스. 제공되는 상태 코드는 규약을 따른다.

웹소켓 클라이언트 페이지에서는 Javascript WebSocket API를 사용한다. 를 눌러서 확인할 수 있다.

위키백과 보기
maven repository
Spring API Reference 보기
Spring API Reference 보기
RFC 6455
Spring API Reference 보기
Mozila Reference 보기
servlet-context.xml에 websocket namespace 활성화