首页 > java > java spring webSocket应用

java spring webSocket应用

作者:bin

WebSocket协议是基于TCP的一种新的网络协议,它实现了浏览器与服务器全双工(full-duplex)通信,即运行服务器主动发送消息给客户端,通常我们的http访问,都只能是又客户端访问驱动

下面将演示一下如何使用java spring搭建一个简单的服务端点
如果你对前端如何实现一个websocket客户端感兴趣,作为关联学习你可以查看(http://zengbingo.com/?p=1494)


首先为要要加入关于WebSocket的依赖,

<dependency>
  <groupId>org.springframwork.boot</groupId>
  <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

然后我们开始建立简单的WebSocket服务端点,配置文件

@Configuration
public class WebSocketConfig {
  //创建服务器端点
  @Bean
  public ServerEndPointExporter serverEndPointExporter() {
   return new ServerEndPointExporter();
  }
}

有了上面的这个Bean,就可以使用@ServerEndPoint定义一个端点服务类:

@ServerEndPoint("/ws")
@Service
public class WebSocketServiceImpl {
  //concurrent包的线程安全Set,用来存放每个客户端对应的WebSocketServiceImpl对象, 下面会用来群发消息
  private static CopyOnWriteArraySet<WebSocketServiceImpl> webSokcetSet = new CopyOnWriteArraySet<>();
  //某个客户端的链接对话
  private Session session;
  
  //当打开新链接时执行
  @OnOpen
  public viod onOpen(Session session) {
   this.session = session;
   //添加进Set中,这样就知道总共有哪些在链接着
   webSocketSet.add(this); 
   System.out.println("有新的链接加入了");
   try {
     sendMessage("你好,新成员");
   }catch (IOException e) {
     System.out.println("IO异常");
   }
  }

  //发送消息给客户端
  private void sendMessage(String message) throw IOException {
    this.session.getBasicRemote().sentText(message);
  }

  //收到客户端发来的消息
  @OnMessage
  public void onMessage(String message, Session session) {
    System.out.println("接收到客户端发来的消息");
  }

  //当链接关闭时执行
  @OnClose
  public viod onClose(){
    webSocketSet.remove(this); //从set中删除
    System.out.println("有一个链接关闭了");
  }

  @OnError
  public void onError(Session session, Throwable error){
    System.out.println("有一个链接异常了");   
    error.printStackTrace();
  }

  //演示如何群发消息给客户端
  public void publishMessage(){
     webSokcetSet.forEach( eachConnect -> {
        eachConnect.sendMessage("这是一条群发消息");
     })
  }
}

您必须 [ 登录 ] 才能发表留言!