zoukankan      html  css  js  c++  java
  • 基于Java的WebSocket推送

    WebSocket的主动推送

    关于消息推送,现在的解决方案如轮询、长连接或者短连接,当然还有其他的一些技术框架,有的是客户端直接去服务端拿数据。
    其实推送推送主要讲的是一个推的概念,WebSocket是一种主动推送消息的技术。

    基于Java的WebSocket

    这里主要是结合网上的例子实现下。

    简单的客户端JavaScript

    <!DOCTYPE html>
    <html>
    <head>
    <title>Testing websockets</title>
    </head>
    <body>
      <div>
        <input type="submit" value="Start" onclick="start()" />
      </div>
      <div id="messages"></div>
      <script type="text/javascript">
        var webSocket =
          new WebSocket('ws://localhost:8080/wesocket/websocketTest');
        webSocket.onerror = function(event) {
          onError(event)
        };
     
        webSocket.onopen = function(event) {
          onOpen(event)
        };
     
        webSocket.onmessage = function(event) {
          onMessage(event)
        };
     
        function onMessage(event) {
          document.getElementById('messages').innerHTML
            += '<br />' + event.data;
        }
     
        function onOpen(event) {
          document.getElementById('messages').innerHTML
            = 'Connection established';
        }
     
        function onError(event) {
          alert(event.data);
        }
     
        function start() {
          webSocket.send('hello');
          return false;
        }
      </script>
    </body>
    </html>
    

    服务端

    package com.tony.websocket;
    
    import javax.websocket.OnClose;
    import javax.websocket.OnMessage;
    import javax.websocket.OnOpen;
    import javax.websocket.Session;
    import javax.websocket.server.ServerEndpoint;
    import java.io.IOException;
    
    @ServerEndpoint("/websocketTest")
    public class WebSocketTest {
    	@OnMessage
    	public void onMessage(String message, Session session) throws IOException, InterruptedException {
    
    		// Print the client message for testing purposes
    		System.out.println("Received: " + message);
    
    		// Send the first message to the client
    		session.getBasicRemote().sendText("This is the first server message");
    
    		// Send 3 messages to the client every 5 seconds
    		int sentMessages = 0;
    		while (sentMessages < 3) {
    			Thread.sleep(5000);
    			session.getBasicRemote().sendText("This is an intermediate server message. Count: " + sentMessages);
    			sentMessages++;
    		}
    
    		// Send a final message to the client
    		session.getBasicRemote().sendText("This is the last server message");
    	}
    
    	@OnOpen
    	public void onOpen() {
    		System.out.println("Client connected");
    	}
    
    	@OnClose
    	public void onClose() {
    		System.out.println("Connection closed");
    	}
    }
    

    pom.xml 文件

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<groupId>com.tony</groupId>
    	<artifactId>wesocket</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<dependencies>
    		<dependency>
    			<groupId>javax.websocket</groupId>
    			<artifactId>javax.websocket-api</artifactId>
    			<version>1.0-rc5</version>
    			<scope>provided</scope>
    		</dependency>
    	</dependencies>
    </project>
    

    我这里用的是JDK是 jdk1.8.0_60 ,Tomcat用的是 apache-tomcat-7.0.64
    1、建立连接

    2、发送消息

    3、服务端推送消息

  • 相关阅读:
    linux设置docker阿里云镜像
    RapidJSON使用代码片段
    从输入URL到浏览器显示页面发生了什么
    基于vue发布npm插件时 引入插件时 控制台报错“Cannot read property 'toLowerCase' of undefined”
    通过git、gitHub将本地代码上传至gitHub上
    360浏览器长时间不访问或卡顿时容易自动切换到兼容模式下
    Linux 系统目录结构
    Linux 系统启动过程
    The Best Place for Error Messages on Forms
    BEST PRACTICES FOR FORM DESIGN
  • 原文地址:https://www.cnblogs.com/tonyY/p/5495417.html
Copyright © 2011-2022 走看看