问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

websocket测试界面

创作时间:
作者:
@小白创作中心

websocket测试界面

引用
1
来源
1.
http://www.cdweb.net/article/ipeoee.html

WebSocket是一种在单个TCP连接上进行全双工通信的协议,使得服务器和客户端之间能够实时地进行数据交换。在Java项目中使用WebSocket实现消息推送功能,可以提升应用的实时性和交互性。本文将通过一个具体的代码示例,详细介绍如何在Java项目中实现WebSocket消息推送。

服务层实现

在服务层,我们需要创建一个WebSocket监听器类,该类需要实现WebSocketConfigurerServletContextListener接口。同时,我们还需要创建一个WebSocket处理器类,用于处理WebSocket连接的建立、关闭以及消息的接收和发送。

package com.demo.websocket;
import java.io.IOException;
import java.util.Iterator;
import java.util.concurrent.ConcurrentLinkedQueue;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
import org.springframework.web.socket.handler.TextWebSocketHandler;
@Configuration
@EnableWebSocket
public class websocketListener implements WebSocketConfigurer, ServletContextListener{
 private ConcurrentLinkedQueue sessions = new ConcurrentLinkedQueue();
 private WebSocketHandlerTest handler;
 @Override
 public void contextDestroyed(ServletContextEvent arg0) {
 // TODO Auto-generated method stub
 }
 @Override
 public void contextInitialized(ServletContextEvent arg0) {
 // TODO Auto-generated method stub
 }
 @Override
 public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
 handler = new WebSocketHandlerTest();
 registry.addHandler(handler, "/ws/notifymessage.ws");
 registry.addHandler(handler, "/ws/sockjs/notifymessage.ws").withSockJS();
 new Thread(handler).start();
 }
 class WebSocketHandlerTest extends TextWebSocketHandler implements Runnable{
 @Override
 public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
 sessions.remove(session);
 }
 @Override
 public void afterConnectionEstablished(WebSocketSession session) throws Exception {
 sessions.add(session);
 }
 @Override
 protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
 super.handleTextMessage(session, message);
 }
 @Override
 public void run() {
 System.out.println("等待推送....");
 try {
 int i = 0;
 for (;;) {
 synchronized (this) {
 try {
 Thread.sleep(3000);
 } catch (InterruptedException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
 }
 if(i%10==0){
 nofity("消息推送测试......");
 System.out.println("推送消息了....");
 }else{
 System.out.println("本次不推送消息了....");
 }
 i++;
 }
 } catch (IOException e) {
 e.printStackTrace();
 System.out.println("失败....");
 }
 }
 private void nofity(String message) throws IOException {
 Iterator iterator = sessions.iterator();
 while (iterator.hasNext()) {
 WebSocketSession session = iterator.next();
 synchronized(session){
 if(session.isOpen()){
 session.sendMessage(new TextMessage(message));
 }else{
 iterator.remove();
 }
 }
 }
 }
 }
}

前台界面监听

前台界面需要监听WebSocket连接,并处理接收到的消息。这里给出一个简单的HTML示例:

<!DOCTYPE html>
<html>
<head>
<title>websocket测试界面</title>
<script>
var ws = new WebSocket("ws://localhost:8080/ws/notifymessage.ws");
ws.onopen = function() {
 console.log("连接已建立");
};
ws.onmessage = function(event) {
 console.log("收到消息: " + event.data);
};
ws.onclose = function() {
 console.log("连接已关闭");
};
</script>
</head>
<body>
<h1>WebSocket测试界面</h1>
</body>
</html>

配置DispatcherServlet

web.xml中配置DispatcherServlet控制器:

<servlet>
 <servlet-name>spring</servlet-name>
 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 <init-param>
 <param-name>contextConfigLocation</param-name>
 <param-value>/WEB-INF/spring-servlet.xml</param-value>
 </init-param>
 <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
 <servlet-name>spring</servlet-name>
 <url-pattern>*.ws</url-pattern>
</servlet-mapping>

spring-servlet.xml可以保持为空,因为WebSocket的配置主要在websocketListener类中完成。

通过以上步骤,你就可以在Java项目中实现WebSocket消息推送功能了。这种方法不仅适用于简单的消息推送,还可以扩展到更复杂的应用场景,如实时聊天、在线游戏等。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号