웹 소켓 웹 채 팅 방 기능 구현
클 라 이언 트
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--;
}
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebSocket+spring 예제 demo 자세히 보기(sockJs 라이브러리 사용)예를 들어 Canvas, 로컬 저장소, 멀티미디어 프로그래밍 인터페이스, WebSocket 등이다.이 중'웹의 TCP'라고 불리는 웹소켓은 특히 개발자들의 주의를 끈다.WebSocket의 등장으로 브라우저가 Sock...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.