웹 소켓 웹 채 팅 방 기능 구현

본 고 는 웹 소켓 이 웹 채 팅 방 을 실현 하 는 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
클 라 이언 트

JS 코드 는 다음 과 같 습 니 다.

/*
 *      js websocket    
 */
  var websocket = null;
  //           WebSocket
  if ('WebSocket' in window) {
    websocket = new WebSocket("ws://localhost:8080/GoodMan/ChatService");
  }
  else {
    alert('      Not support websocket')
  }
  
   //           
  websocket.onopen = function () {
    alert("WebSocket    ");
  }

  //           
  websocket.onerror = function () {
    alert("WebSocket      ");
  };
  
   //    
  function sendMess(content) {
     var json ="{'username':'"+'${sessionScope.username }'+"', 'content':'"+content+"'}";
    websocket.send(json);
  }

  //          
  websocket.onmessage = function (event) {
    var jsonString = event.data;    //         event.data 
    var data = JSON.parse(jsonString);  // json      js  
    //     data
  }

   //         
  websocket.onclose = function () {
    alert("WebSocket    ");
  }

  //        ,      ,     websocket  ,             ,server     。
  window.onbeforeunload = function () {
    closeWebSocket();
  }

  //  WebSocket  
  function closeWebSocket() {
    websocket.close();
  }

서버

import java.io.IOException;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import com.google.gson.Gson;

class Mess{    //      
  private String username;
  private String content;
  private String date;
  public Mess(String username, String content, String date) {
    super();
    this.username = username;
    this.content = content;
    this.date = date;
  }
  public String getUsername() {
    return username;
  }
  public void setUsername(String username) {
    this.username = username;
  }
  public String getContent() {
    return content;
  }
  public void setContent(String content) {
    this.content = content;
  }
  public String getDate() {
    return date;
  }
  public void setDate(String date) {
    this.date = date;
  }
}

@ServerEndpoint("/ChatService")
public class ChatService {      //       ,     ChatService  
  
  private static int onlineCount = 0; //    ,            
  private static Set<ChatService> webSocketSet = new HashSet<>();    //    ,        
  private Session session;   //           ,             

  /**
   *            
   * @param session      。session            ,              
   */
  @OnOpen
  public void onOpen(Session session){
    this.session = session;
    webSocketSet.add(this);   //  set 
    addOnlineCount();      //    1
    System.out.println("      !       " + getOnlineCount());
  }
  
  /**
   *          
   */
  @OnClose
  public void onClose(){
    webSocketSet.remove(this); // set   
    subOnlineCount();      //    1
    System.out.println("      !       " + getOnlineCount());
  }

  /**
   *              
   * @param message           
   * @param session      
   */
  @OnMessage
  public void onMessage(String data, Session session) {
    Mess mess = new Gson().fromJson(data, Mess.class);
    System.out.printf(" %s   :%s
", mess.getUsername(), mess.getContent()); // for(ChatService item: webSocketSet){ try { item.sendMessage(mess); } catch (IOException e) { e.printStackTrace(); continue; } } } /** * * @param session * @param error */ @OnError public void onError(Session session, Throwable error){ System.out.println(" "); error.printStackTrace(); } // public void sendMessage(Mess mess) throws IOException{ String datatime = new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()); mess.setDate(datatime); String jsonInfo = new Gson().toJson(mess); // json this.session.getAsyncRemote().sendText(jsonInfo); // session } public static synchronized int getOnlineCount() { return onlineCount; } public static synchronized void addOnlineCount() { ChatService.onlineCount++; } public static synchronized void subOnlineCount() { ChatService.onlineCount--; } }
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기