【WebSocket】WebSocket经典实例

简介: 接着上一篇的环境,我们接下来弄了个WebSocketTest2目录结构 jquery-1.12.3.js(贴心服务)WebSocketTest2.javapackage com.hust.websockettest;import java.io.IOException;import java.util.Queue;import java.util.

接着上一篇的环境,我们接下来弄了个WebSocketTest2

目录结构
这里写图片描述

jquery-1.12.3.js(贴心服务)

WebSocketTest2.java

package com.hust.websockettest;

import java.io.IOException;
import java.util.Queue;
import java.util.Set;
import java.util.concurrent.ConcurrentLinkedQueue;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

@ServerEndpoint("/websocket2")
public class WebSocketTest2 {
    /**
     * 存储当前有效的session对象
     */
    private static Queue<Session> sessionSet = new ConcurrentLinkedQueue<Session>();

    @OnMessage
    public void onMessage(String message, Session currentSession) {
        System.out.println("Server say:Received: " + message);
        try {
            final Set<Session> sessions = currentSession.getOpenSessions();
            // 客户端互相发送消息
            for (Session session : sessions) {
                session.getBasicRemote().sendText(message);
            }
            /************ 启动定时公告 **************/
            //SystemTimer.getInstance();
            /**************************/
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @OnOpen
    public void onOpen(Session currentSession) {
        if (sessionSet.contains(currentSession) == false) {
            sessionSet.add(currentSession);
            System.out.println("WebSocketTest.onOpen()================Add=" + sessionSet.size());
        }
        System.out.println("Server say:Client connected");
    }

    @OnClose
    public void onClose(Session currentSession) {
        if (sessionSet.contains(currentSession)) {
            sessionSet.remove(currentSession);
        }
        System.out.println("Server say:Connection closed============Close=" + sessionSet.size());
    }

    public static Queue<Session> getSessionSet() {
        return sessionSet;
    }

}

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
<style type="text/css">
.infos {
    list-style-type: none;
}

.infos li {
    border: 1px solid #EEE;
    margin: 2px;
    font-size: 12px;
    line-height: 25px;
    height: 25px;
}

.red {
    color: red;
}

.green {
    color: green;
}

.blue {
    color: blue;
}
</style>
<script type="text/javascript" src="jquery-1.12.3.js"></script>
<script type="text/javascript">
    var webSocket = null;
    var flag = true;//全局标记位,标记浏览器是否支持websocket
    $(function() {
        if (!window.WebSocket) {
            $("body").append("<h1>你的浏览器不支持WebSocket</h1>");
            flag = false;
            return;
        }

    });

    function startConnect() {
        if (flag == false) {
            return;
        }
        var url = "ws://localhost:8080/WebSocketTest/websocket2";
        webSocket = new WebSocket(url);

        webSocket.onerror = function(event) {
            onError(event)
        };
        webSocket.onopen = function(event) {
            onOpen(event)
        };
        webSocket.onmessage = function(event) {
            onMessage(event)
        };

        //webSocket.send("客户端给服务端发送消息:hello,start");

    }
    function onMessage(event) {
        $(".infos").append("<li class='blue'>" + event.data + "</li>");
    }
    function onOpen(event) {
        $(".infos").append("<li class='green'>已连接至服务器</li>");
        $("#startBtn").prop("disabled", true);
        $("#sendMessageBtn").prop("disabled", false);
    }
    function onError(event) {
        $(".infos").append("<li class='red'>连接服务器发生错误</li>");
    }
    function sendMessage() {
        var msg = "[" + $("#username").val() + "]:"
                + $("#message_input_id").val();//获取发送信息
        webSocket.send(msg);//向服务器发送消息
        //不需要将此信息追加到列表,由后台统一将消息发送给所有
        //$(".infos").append("<li class='green'>" + msg + "</li>");//将消息添加至本地列表
        $("#message_input_id").val("");//清空消息
    }
</script>
</head>

<body>

    <ul class="infos">
        <li class="red">提示:点击开始连接将连接到服务器</li>
    </ul>
    <br />
    <br />
    <input type="button" value="开始连接" id="startBtn"
        onclick="startConnect()" />
    <br />
    <br /> 输入名称:
    <input id="username" value="<%=(int) (Math.random() * 1000)%>"
        style="width: 50px; margin-right: 5px;" />
    <input id="message_input_id" />
    <input type="button" value="发送消息" id="sendMessageBtn"
        disabled="disabled" onclick="sendMessage()" />

</body>
</html>

运行截图

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

看图基本明白,第一个是我连接之后断开额,二三是一起连接着的,所以后台会显示add=2。就是可以多个一起链接,而且是长连接。

目录
相关文章
|
10月前
|
设计模式 Java Spring
【Spring源码】WebSocket做推送动作的底层实例是谁
我们都知道WebSocket可以主动推送消息给用户,那做推送动作的底层实例究竟是谁?我们先整体看下整个模块的组织机构。可以看到handleMessage方法定义了每个消息格式采用不同的消息处理方法,而这些方法该类并**没有实现**,而是留给了子类去实现。
113 1
【Spring源码】WebSocket做推送动作的底层实例是谁
|
前端开发 JavaScript
React+Websocket简单实例
最近很多项目需要用到websocket,经过智能客服项目沉淀了一个简单的实例,以后可以直接用。有需要指教的地方可以联系我。
3410 0
|
JavaScript
js实现websocket实例
js实现websocket实例
267 0
|
消息中间件 JSON JavaScript
Springboot 整合Websocket+Stomp协议+RabbitMQ做消息代理 实例教程
Springboot 整合Websocket+Stomp协议+RabbitMQ做消息代理 实例教程
1969 0
Springboot 整合Websocket+Stomp协议+RabbitMQ做消息代理 实例教程
|
XML Java 数据格式
java websocket简单实例绝对可用
坑爹的网友,java一个个的网上websocket例子都不写web.xml的配置,MD~这不是给别人挖坑吗?既然写例子就要完整啊!!! 需要注意的是:1.web.xml配置服务端的servlet。
2791 0
|
Web App开发 应用服务中间件 nginx
|
Web App开发 前端开发 Go
html5+go+websocket简单实例代码
这次的就直接发放代码截图吧,应该是用go语言做后台一个简易的聊天,这里没用到什么特别的知识,最朴实的来实现效果,主要目的是分享下h5怎么用websocket,go搭建websocket服务的主要部分。   go代码部分: 1 // WebChat project main.
1231 0
|
Web App开发 应用服务中间件 C#
C#版Websocket实例
Demo地址:www.awbeci.xyz websocket有java、nodejs、python,Php等等版本,我使用的是C#版本,服务器端是Fleck,github地址:https://github.
2936 0
|
移动开发
WebSocket简单使用(四) - 完整实例
原文 http://www.oseye.net/user/kevin/blog/81 关于WebSocket我打算分如下几篇博文来探探路: WebSocket简单使用(一) - 概念 WebSocket简单使用(二) - 客户端 WebSocket简单使用(三) - 服务器端 WebSocket简单使用(四) - 完整实例 WebSocket简单使用(五) - 模拟微信 连接键盘 功能 背景: 前几天老大突然发现微信有个链接键盘的功能,我仔细想了下或许是使用WebSocket来实现的,又加上最近HTML5的呼声愈来愈高,觉得有必要研究下HTML5了。
1451 0

热门文章

最新文章