WebSokect 简单案例

前言:最近有一个项目用到了websokect,小小学习了一下websokect,本来一天内能搞定的,结果花了三天。代码没错,就是执行不起来,后来发现了,我的JDK是6的。造成运行不起来。
- 环境介绍
1. JDK7(必须) + TOMCAT7(最好7.05以上)
备注:多啰嗦一句,JDK最少要JDK7,如果是eclipse运行,里面的tomcat的java编译设置也需要设置成JDK7,就是因为我没设置tomcat的编译的JDK版本导致运行不起来。多花费了我几个小时。

废话不多说,直接上代码


maven配置:

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>7.0</version>
    <scope>provided</scope>
</dependency>

java后台代码:

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

@ServerEndpoint("/myWebSokect")
public class MyWebSokect {

    private static int countPer = 0;

    private Session session;

    private static List<MyWebSokect> webSokects = new ArrayList<MyWebSokect>();

    @OnOpen
    public void onOpen(Session session) {
        this.session = session;
        webSokects.add(this);
        addCountPer();
        System.out.println("当前在线人数:"+getCountPer());
    }

    @OnClose
    public void onClose() {
        webSokects.remove(this);
        removeCountPer();
        System.out.println("当前在线人数:"+getCountPer());
    }

    @OnMessage
    public void onMessage(String message, Session session) {
        // 消息群发
        for(MyWebSokect webSoekct : webSokects) {
            try {
                // 这个或许不好理解
                // this.session.getBasicRemote().sendText(message);
                // 修改称这个就好理解了
                webSoekct.getSession().getBasicRemote().sendText(message);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    @OnError
    public void onError(Session session, Throwable error) {
        removeCountPer();
        System.out.println("websokect error()");
    }

    public void addCountPer() {
        MyWebSokect.countPer++;
    }

    public void removeCountPer() {
        MyWebSokect.countPer--;
    }

    public int getCountPer() {
        return countPer;
    }

    public Session getSession() {
        return session;
    }

    public void setSession(Session session) {
        this.session = session;
    }

    public static void setCountPer(int countPer) {
        MyWebSokect.countPer = countPer;
    }

}

JSP代码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML>
<html>
  <head>
    <base href="<%=basePath%>">
    <title>My WebSocket</title>
  </head>

  <body>
    Welcome<br/>
    <input id="text" type="text" />
    <button onclick="send()">Send</button>    
    <button onclick="closeWebSocket()">Close</button>
    <div id="message">

    </div>
  </body>

  <script type="text/javascript">
      var websocket = null;

      //判断当前浏览器是否支持WebSocket
      if('WebSocket' in window){
          websocket = new WebSocket("ws://localhost:8080/websokectTest/myWebSokect");
      }
      else{
          alert('Not support websocket');
      };

      //连接发生错误的回调方法
      websocket.onerror = function(){
          setMessageInnerHTML("error");
      };

      //连接成功建立的回调方法
      websocket.onopen = function(event){
          setMessageInnerHTML("open");
      };

      //接收到消息的回调方法(在火狐中event会出错,报没有定义event)
      websocket.onmessage = function(){
          setMessageInnerHTML(event.data);
      };

      //连接关闭的回调方法
      websocket.onclose = function(){
          setMessageInnerHTML("close");
      };

      //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
      window.onbeforeunload = function(){
          websocket.close();
      };

      //将消息显示在网页上
      function setMessageInnerHTML(innerHTML){
          document.getElementById('message').innerHTML += innerHTML + '<br/>';
      };

      //关闭连接
      function closeWebSocket(){
          websocket.close();
      };

      //发送消息
      function send(){
          var message = document.getElementById('text').value;
          websocket.send(message);
      };
  </script>
</html>

测试通过环境:
谷歌浏览器

备注:用火狐的时候jsp里面有一个event变量,火狐里面不能用。会报错。说event没有定义。这个地方交给你们去完善了。哈哈。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值