美文网首页
Spring Boot WebSocket

Spring Boot WebSocket

作者: 微雨花间_b690 | 来源:发表于2018-10-21 15:04 被阅读0次

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>

相关文章

网友评论

      本文标题:Spring Boot WebSocket

      本文链接:https://www.haomeiwen.com/subject/ohybzftx.html