Spring Boot WebSocket

1、在pom.xml文件中添加依赖

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-websocket</artifactId>

</dependency>

2、WebSocketConfig

@Configuration

public class WebSocketConfig {

@Bean

    public ServerEndpointExporterserverEndpointExporter(){

return new ServerEndpointExporter();

    }

}

3、WebSocketServer

@ServerEndpoint("/websocket")

@Component

public class WebSocketServer {

//静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。

    private static int onlineCount =0;

    //concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。

    private static CopyOnWriteArraySetwebSocketSet =new CopyOnWriteArraySet();

    //与某个客户端的连接会话,需要通过它来给客户端发送数据

    private Sessionsession;

    /**

* 连接建立成功调用的方法

*/

    @OnOpen

    public void onOpen(Session session) {

this.session = session;

        webSocketSet.add(this);    //加入set中

        addOnlineCount();          //在线数加1

        System.out.println("有新窗口开始监听,当前在线人数为" +getOnlineCount());

        try {

sendMessage("连接成功");

        }catch (IOException e) {

System.out.println("WebSocket IO异常");

        }

}

/**

* 连接关闭调用的方法

*/

    @OnClose

    public void onClose() {

webSocketSet.remove(this);  //从set中删除

        subOnlineCount();          //在线数减1

        System.out.println("有连接关闭!当前在线人数为" +getOnlineCount());

    }

/**

* 收到客户端消息后调用的方法

*

    * @param message 客户端发送过来的消息

*/

    @OnMessage

    public void onMessage(String message, Session session) {

System.out.println("收到客户端的信息:" + message);

        //群发消息

        for (WebSocketServer item :webSocketSet) {

try {

item.sendMessage(message);

            }catch (IOException e) {

e.printStackTrace();

            }

}

}

/**

    * @param session

    * @param error

    */

    @OnError

    public void onError(Session session, Throwable error) {

System.out.println("发生错误");

        error.printStackTrace();

    }

/**

* 实现服务器主动推送

*/

    public void sendMessage(String message)throws IOException {

this.session.getBasicRemote().sendText(message);

    }

/**

* 群发自定义消息

*/

    public static void sendInfo(String message)throws IOException {

System.out.println("推送消息内容:" + message);

        for (WebSocketServer item :webSocketSet) {

try {

item.sendMessage(message);

            }catch (IOException e) {

continue;

            }

}

}

4、WebSocketController

@RestController

public class WebSocketController {

@RequestMapping("/socket")

public StringopenTencent(){

        return "tencent";

    }

/**

* 推送数据

    * @param say

    * @return

    */

    @RequestMapping("/socket/push")

public StringpushMsg(@RequestParam("say") String say) {

try {

WebSocketServer.sendInfo("服务器推送消息"+say);

        }catch (IOException e) {

e.printStackTrace();

        }

return "tencent";

    }

}

5、index

<!DOCTYPE html>

<html lang="en">

    <meta charset="UTF-8">

    <title>WebSocket页面

<div style="margin-left:400px;width:500px;height:120px;background-color:wheat">

    <h2>请输入想说的话:

    <input type="text" id="say" name="say">

    <input type="button" id="sendSay" name="sendSay" value="发送">

<div style="margin-left:400px;">

    <h2>对话框

    <textarea id="message" cols="150px" rows="200px" disabled style="width:500px;height:500px">

    var socket;

    var say = document.getElementById("say");

    var sendSay = document.getElementById("sendSay");

    var message= document.getElementById("message");

    if (typeof(WebSocket) =="undefined") {

console.log("您的浏览器不支持WebSocket");

    }else {

console.log("您的浏览器支持WebSocket");

        //实现化WebSocket对象,指定要连接的服务器地址与端口建立连接

        socket =new WebSocket("ws://localhost:8080/websocket");

        //打开事件

        socket.onopen =function () {

console.log("Socket已打开");

            // socket.send("这是来自客户端的消息:" + new Date());

        };

        sendSay.onclick =function sendSay(){

socket.send("这是来自客户端的消息:" + say.value)

};

        //获得消息事件

        socket.onmessage =function (msg) {

console.log(msg.data);

            // alert(msg.data);

            var messageInfo = message.value;

            messageInfo = messageInfo +" \n " + msg.data;

            message.value = messageInfo;

        };

        //关闭事件

        socket.onclose =function () {

console.log("Socket已关闭");

        };

        //发生了错误事件

        socket.onerror =function () {

alert("Socket发生了错误");

        }

}

</html>

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文地址:http://www.ibm.com/developerworks/cn/java/j-lo-WebSo...
    敢梦敢当阅读 8,944评论 0 50
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,923评论 18 139
  • 【1】http协议介绍 1)介绍:http协议是请求/响应范式的,每个http 响应都对应一个 http 请求,h...
    每一天为明天168阅读 1,411评论 0 1
  • 近半年坚持每天喂流浪猫,楼下的猫仔渐渐知道在52号楼下是有粮可食的,从小小猫一点点长大长肥了,猫仔们也算知恩,现...
    俞晴天阅读 307评论 0 0
  • 世界上多数人都是努力的,而真正成功的只是少数人。那么努力为什么不会带来成功,因为有目标却不敢行动,还因为根本没有目...
    千面英雄侠阅读 1,444评论 0 1