博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Html5,Java WebSocket简单实现
阅读量:7062 次
发布时间:2019-06-28

本文共 2873 字,大约阅读时间需要 9 分钟。

hot3.png

web端代码:

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

服务端代码:

package com.chen.websocket;import java.io.IOException;import java.util.concurrent.CopyOnWriteArraySet;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;//该注解用来指定一个URI,客户端可以通过这个URI来连接到WebSocket。类似Servlet的注解mapping。无需在web.xml中配置。@ServerEndpoint("/websocket")public class MyWebSocket {
//静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。 private static int onlineCount = 0; //concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识 private static CopyOnWriteArraySet
webSocketSet = new CopyOnWriteArraySet
(); //与某个客户端的连接会话,需要通过它来给客户端发送数据 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(MyWebSocket 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() { MyWebSocket.onlineCount++; } public static synchronized void subOnlineCount() { MyWebSocket.onlineCount--; }}

转载于:https://my.oschina.net/u/3206691/blog/1607183

你可能感兴趣的文章
case when
查看>>
[转载] HTML简介
查看>>
Oracle 查看表空间的大小及使用情况sql语句
查看>>
Android画图并保存图片(转载)
查看>>
移动下标效果
查看>>
eclipse 性能调优之内存分配
查看>>
c语言程序开发过程,编译的完整过程
查看>>
POJ2472106 miles to Chicago
查看>>
python高级(4)—— 虚拟环境安装使用
查看>>
rabbitmq management Login Failed
查看>>
『Kruscal重构树 Exkruscal』
查看>>
QTP的那些事 -– Visual Relation Identifier Feature: How to use in the real world
查看>>
项目管理软件推荐
查看>>
Request.Url.Query 和 Request.QueryString的区别
查看>>
SCU 4439 Vertex Cover(二分图最小覆盖点)题解
查看>>
js创建及操作数组
查看>>
Web前端开发面试题赋答案
查看>>
javascript创建对象的几种方式
查看>>
yarn.resourcemanager.ha.id设置
查看>>
主动调用其他类的成员, 特殊成员
查看>>