`
itace
  • 浏览: 180560 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

websocket例子

 
阅读更多

 

转自:http://blog.csdn.net/liu857279611/article/details/70157012

 

package me.gacl.websocket;

import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;

import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;

/**
 * @ServerEndpoint 注解是一个类层次的注解,它的功能主要是将目前的类定义成一个websocket服务器端,
 * 注解的值将被用于监听用户连接的终端访问URL地址,客户端可以通过这个URL来连接到WebSocket服务器端
 */
@ServerEndpoint("/websocket")
public class WebSocketTest {
	//静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。
	private static int onlineCount = 0;

	//concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识
	private static CopyOnWriteArraySet<WebSocketTest> webSocketSet = new CopyOnWriteArraySet<WebSocketTest>();

	//与某个客户端的连接会话,需要通过它来给客户端发送数据
	private Session session;

	/**
	 * 连接建立成功调用的方法
	 * @param session  可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据
	 */
	@OnOpen
	public void onOpen(Session session){
		this.session = session;
		webSocketSet.add(this);     //加入set中
		addOnlineCount();           //在线数加1
		System.out.println("有新连接加入!当前在线人数为" + getOnlineCount());
	}

	/**
	 * 连接关闭调用的方法
	 */
	@OnClose
	public void onClose(){
		webSocketSet.remove(this);  //从set中删除
		subOnlineCount();           //在线数减1
		System.out.println("有一连接关闭!当前在线人数为" + getOnlineCount());
	}

	/**
	 * 收到客户端消息后调用的方法
	 * @param message 客户端发送过来的消息
	 * @param session 可选的参数
	 */
	@OnMessage
	public void onMessage(String message, Session session) {
		System.out.println("来自客户端的消息:" + message);
		//群发消息
		for(WebSocketTest item: webSocketSet){
			try {
				item.sendMessage(message);
			} catch (IOException e) {
				e.printStackTrace();
				continue;
			}
		}
	}

	/**
	 * 发生错误时调用
	 * @param session
	 * @param error
	 */
	@OnError
	public void onError(Session session, Throwable error){
		System.out.println("发生错误");
		error.printStackTrace();
	}

	/**
	 * 这个方法与上面几个方法不一样。没有用注解,是根据自己需要添加的方法。
	 * @param message
	 * @throws IOException
	 */
	public void sendMessage(String message) throws IOException{
		this.session.getBasicRemote().sendText(message);
		//this.session.getAsyncRemote().sendText(message);
	}

	public static synchronized int getOnlineCount() {
		return onlineCount;
	}

	public static synchronized void addOnlineCount() {
		WebSocketTest.onlineCount++;
	}

	public static synchronized void subOnlineCount() {
		WebSocketTest.onlineCount--;
	}
}

 

<%@ page language="java" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>Java后端WebSocket的Tomcat实现</title>
</head>
<body>
    Welcome<br/><input id="text" type="text"/>
    <button onclick="send()">发送消息</button>
    <hr/>
    <button onclick="closeWebSocket()">关闭WebSocket连接</button>
    <hr/>
    <div id="message"></div>
</body>

<script type="text/javascript">
    var websocket = null;
    //判断当前浏览器是否支持WebSocket
    if ('WebSocket' in window) {
        websocket = new WebSocket("ws://localhost:8080/mywebsocket/websocket");
    }
    else {
        alert('当前浏览器 Not support websocket')
    }

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

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

    //接收到消息的回调方法
    websocket.onmessage = function (event) {
        setMessageInnerHTML(event.data);
    }

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

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

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

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

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

 

打开谷歌和火狐浏览器访问http://127.0.0.1:8080/mywebsocket/

 

分享到:
评论

相关推荐

    netty实现websocket例子

    在"Netty实现WebSocket例子"中,我们将探讨如何使用Netty来搭建WebSocket服务器,并实现客户端与服务器之间的双向通信。首先,我们需要理解WebSocket的基本概念和工作原理。WebSocket协议是基于TCP的,它通过HTTP的...

    webSocket例子

    在"webSocket例子"这个教程中,我们可以学习到如何在后台服务器上设置WebSocket服务,并且让前端页面能够接收到这些服务推送的消息。WebSocket协议的建立通常包括以下步骤: 1. **握手阶段(Handshake)**:客户端...

    springboot-websocket例子

    以下是对"springboot-websocket例子"中可能包含的知识点的详细解释: 1. **Spring Boot基础**: Spring Boot简化了Spring应用程序的创建,通过自动配置和起步依赖(Starter POMs)使得开发过程更加便捷。在这个...

    WebSocket例子源代码下载

    本压缩包中的"WebSocket例子源代码下载"提供了两个WebSocket的示例项目,旨在帮助开发者理解和应用WebSocket技术。这些例子可以帮助我们理解以下几个关键知识点: 1. **WebSocket API的使用**:WebSocket API主要由...

    Websocket 例子

    标题中的"Websocket 例子"指的是一个实际应用WebSocket技术的示例项目,可能是为了教学或演示目的。这个例子是在Jetty环境下运行的,Jetty是一个轻量级、高性能的Java Web服务器和Servlet容器,它支持WebSocket协议...

    html5 websocket 例子

    在这个“html5 websocket 例子”中,我们将探讨如何在Node.js v0.8.9环境下实现WebSocket服务器和客户端的交互。 首先,WebSocket协议的引入是为了克服传统HTTP协议的限制,HTTP协议是一种无状态、单向的请求-响应...

    spring boot websocket例子

    spring boot websocket例子,实现socket连接,关闭,发送消息功能,运行Application.java运行项目,访问地址http://localhost:8080/socket.html

    websocket 例子

    在这个"WebSocket例子"中,包含了一个WebSocket客户端和服务器端的实现,这为我们提供了研究WebSocket工作原理和实际应用的良好机会。 WebSocket协议在2011年被IETF(互联网工程任务组)标准化为RFC 6455,目的是...

    VB6.0 实现WebSocket 例子.7z

    这个"VB6.0 实现WebSocket的例子"压缩包很可能是包含了一个完整的示例,展示了如何在VB6.0环境中搭建WebSocket客户端或服务器。解压后,开发者可以研究源代码,学习并理解实现的细节,为自己的项目提供参考。

    websocket完整例子

    WebSocket是一种在客户端和服务器之间建立持久连接的协议,它允许双方进行全双工通信,即数据可以在两个方向上同时传输,极大地提高了实时性。在Java中,WebSocket的实现主要依赖于Servlet 3.0规范引入的新特性。...

    webSocket实现例子

    WebSocket是一种在客户端和服务器之间建立持久连接的协议,它允许双方进行全双工通信,即数据可以在两个方向上同时传输,极大地提高了实时性。在Java中实现WebSocket,我们可以利用Java API for WebSocket (JSR 356)...

    Windows Phone WebSocket 例子程序

    WebSocket是Web通信协议的一种,它为双向通信提供了低延迟、高效能的解决方案。在Windows Phone平台上,WebSocket的使用对于开发实时应用,如在线游戏、聊天应用或者股票交易应用等,显得尤为重要。本示例程序旨在...

    websocket java 实现例子

    以上就是一个简单的WebSocket在Java(JDK 1.8)和Tomcat 8中的实现例子。实际应用中,可能需要处理更复杂的业务逻辑,如连接池管理、消息编码解码、错误处理等。此外,还可以考虑使用WebSocket库,如Jetty的...

    websocket 小例子

    用于网页端的websocket代码,亲测可用。用于网页端的websocket代码,亲测可用。

    websocket小例子

    在WebSocket小例子中,我们通常会涉及以下几个关键概念: 1. **握手(Handshake)**:WebSocket连接的建立始于一个HTTP升级请求,这个过程称为握手。客户端通过发送一个"Upgrade"头字段,请求将连接升级到WebSocket...

    C# WebSocket使用实例源码,包含服务端和客户端

    WebSocket是Web应用中实现双向通信的一种技术,它允许服务器与客户端之间进行实时、低延迟的数据交换。在C#中,WebSocket的使用主要依赖于.NET Framework或.NET Core的相关库。本实例是一个基于C#的WebSocket应用,...

    qt websocket 客户端代码 简单的websocket的示例代码

    WebSocket是一种在客户端和服务器之间建立持久连接的协议,它允许双方进行全双工通信,即数据可以在两个方向上同时传输,极大地提高了实时性。在Qt框架下,我们可以使用Qt网络模块中的QWebSocket类来实现WebSocket...

Global site tag (gtag.js) - Google Analytics