websocket实现聊天室

在线测试websocket工具http://www.blue-zero.com/WebSocket/ 

package com.bgs.web;

import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

import org.springframework.stereotype.Component;

@ServerEndpoint("/websocket")
public class MyWebSocket {
    
    private static int onlineCount = 0;
    
    private static CopyOnWriteArraySet<MyWebSocket> webSocketSet = new CopyOnWriteArraySet<>();
    
    private Session session;
    
    @OnOpen           //建立连接调用的方法
    public void onOpen (Session session) {
        this.session = session;
        webSocketSet.add(this);
        addOnlineCount();
        System.out.println("有新链接加入!当前在线人数为:"+getOnlineCount());
    }
    
    @OnClose          //关闭连接调用方法
    public void OnClose() {
        webSocketSet.remove(this);
        subOnlineCount();
        System.out.println("有一链接关闭!当前人数为:"+getOnlineCount());
    }

    @OnMessage          //发送消息调用方法
    public void onMessage(String message,Session session) throws IOException {
        System.out.println("来自客户的消息:"+message);
        //群发消息
        for(MyWebSocket item : webSocketSet) {
            item.sendMessage(message);
        }
    }
    
    public void sendMessage(String message) throws IOException {
        this.session.getBasicRemote().sendText(message);
    }
    
    public static synchronized int getOnlineCount() {
        return MyWebSocket.onlineCount;
    }
    
    public static synchronized void addOnlineCount() {
        MyWebSocket.onlineCount++;
    }
    
    public static synchronized void subOnlineCount() {
        MyWebSocket.onlineCount--;
    }    
    
    
    
}
 

HTML页面

<!DOCTYPE html>
<html>
<head>
   <meta charset="UTF-8">
   <base href="localhost://localhost:8080/">
   <title>My WebSocket</title>
</head>
<body>
   Welcome<br/>
   <div id="message">
   
   </div>
   <input id="text" type="text">
   <button onclick="send()">Send</button>
   <button onclick="closeWebSocket()">Close</button>
</body>

<script type="text/javascript">
   var websocket = null;
   
   //判断当前浏览器是否支持WebSocket
   //本机IP
   if('WebSocket' in window){
      websocket = new WebSocket("ws://192.168.36.26:8080/websocket");
   }else{
      alert("Not Support websocket")
   }

    //连接发生错误的回调方法  
    websocket.onerror = function () {  
        setMessageInnerHTML("error");  
    }; 

    //连接成功建立的回调方法  
    websocket.onopen = function (event) {  
        setMessageInnerHTML("open");  
    }
    
    //接收到消息的回调方法  
    websocket.onmessage = function (event) {  
        setMessageInnerHTML(event.data);  
    }
    
    //连接关闭的回调方法  
    websocket.onclose = function () {  
        setMessageInnerHTML("close");  
    }
    
  //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。  
    window.onbeforeunload = function () {  
        websocket.close();  
    } 
    
  //将消息显示在网页上
   function setMessageInnerHTML(innerHTML) {
      document.getElementById('message').innerHTML += innerHTML + '<br/>';
   } 

    //关闭连接  
    function closeWebSocket() {  
        websocket.close();  
    }
  
   //发送消息  
    function send() {  
        var message = document.getElementById('text').value;  
        websocket.send(message);  
    }
  
  
</script>
</html>

也可以在浏览器输入这地址进行测试,自己电脑的ip地址加端口号,项目名还有socket路径,切记ip地址一定要写对,ipv4这个地址

 

 

猜你喜欢

转载自blog.csdn.net/kxj19980524/article/details/84935970