zoukankan      html  css  js  c++  java
  • 学习WebSocket(一)

    由于项目需要长连接的方式获取实时的数据,所以就得开始百度研究webSocket怎么玩。

    详细介绍看这边。写的真好看:https://www.cnblogs.com/jingmoxukong/p/7755643.html#websocket-%E4%BB%A3%E7%90%86

    1、WebSocket 是一种网络通信协议。HTML5

    2、为啥需要用到WebSocket

      1、HTTP 协议是一种无状态的、无连接的、单向的应用层协议。它采用了请求/响应模型。通信请求只能由客户端发起,服务端对请求做出应答处理。(HTTP 协议无法实现服务器主动向客户端发起消息。)

    代码如下。

    通过扫描的方式

    package com.bjsxt.config;
    
    import javax.websocket.Endpoint;
    import javax.websocket.server.ServerApplicationConfig;
    import javax.websocket.server.ServerEndpointConfig;
    import java.util.Set;
    
    public class WebSocketConfig implements ServerApplicationConfig {
    
      /*
       * 1.  getAnnotatedEndpointClasses
       * 2.  getEndpointConfigs
       *
       * 上面的两个方法都是用来注册 webSocket的。   只不过注册的方式不同。  1方法是 注解的方式
       * 2方法是 接口的方式
       *
       * 显然 注解的方式更加的 灵活简单。  接口的方式更加的传统,严谨。
       *
       * (non-Javadoc)
       * @see javax.websocket.server.ServerApplicationConfig#getAnnotatedEndpointClasses(java.util.Set)
       */
      @Override
      public Set<Class<?>> getAnnotatedEndpointClasses(Set<Class<?>> arg0) {
        // TODO Auto-generated method stub
        System.out.println("正在扫描所有的webSocket服务!!!");
        return arg0;
      }
    
      @Override
      public Set<ServerEndpointConfig> getEndpointConfigs(Set<Class<? extends Endpoint>> arg0) {
        // TODO Auto-generated method stub
        return null;
      }
    }
    @ServerEndpoint通过这个注解。来访问这个地址
    package com.bjsxt.endpoint;
    
    import javax.websocket.OnOpen;
    import javax.websocket.Session;
    import javax.websocket.server.ServerEndpoint;
    
    
    @ServerEndpoint("/hello")
    public class HelloWorld {
        /**
         * @OnOpen 这个注解很重要,如果没有写,方法不会走进去的
         * @param session
         */
        @OnOpen
        public void  open(Session  session ){
            System.out.println("建立了一个 webSocket通道!!!  sid:"+session.getId());
        }
    }

    页面上

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        <title>My JSP 'index.jsp' starting page</title>
        <script type="text/javascript">
            function  ws_init(){
                 var target="ws://localhost:8081/hello";
                  if ('WebSocket' in window) {
                      ws = new WebSocket(target);   ===这里去调用HelloWorld 的open方法
                  } else if ('MozWebSocket' in window) {
                      ws = new MozWebSocket(target);
                  } else {
                      alert('WebSocket is not supported by this browser.');
                      return;
                  }
                  ws.onopen=function(){
                            console.info("webSocket通道建立成功!!!");  
                  };
                    
            }
        
        </script>
      </head>
      <body>
      
              <button  onclick="ws_init();"  >建立连接</button>
                  
      
      </body>
    </html>
  • 相关阅读:
    Jquery尺寸
    Jquery 位置
    c#编码规范
    手机即时通信文章列表
    缺陷跟踪系统BugTracker。 以下对使用
    用正则表达式来匹配图片标签
    mvc 分页
    Asp.Net MVC4网站中自定义AuthorizeAttribute
    asp.net mvc4 身份验证问题无法绕过内置的Membership/Role机制
    HDU4712Hamming Distance随机化算法
  • 原文地址:https://www.cnblogs.com/xuerong/p/8821062.html
Copyright © 2011-2022 走看看