简易服务端之Servlet实现Websocket消息通信
Posted Android_小黑
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简易服务端之Servlet实现Websocket消息通信相关的知识,希望对你有一定的参考价值。
本文地址:https://blog.csdn.net/qq_40785165/article/details/121622651,转载需附上此链接
坚持就是胜利
大家好,我是小黑,一个还没秃头的程序员~~~
本期写点服务端的内容,介绍一下大学时期经常用到的Servlet是如何实现WebSocket连接与通信的,编写Servlet不需要搭建复杂的框架,沿用大学期间学习的Web项目经验即可,适用于大学生开发毕业设计或者课程作业等场景。
话不多说,直接开始:
条件:
- 需要Java-WebSocket-1.3.5.jar文件
链接:https://pan.baidu.com/s/1klmTVfjaqOBrCVRqsPbGNQ
提取码:ijqw
- 需要Tomcat8.0及以上
代码如下:
package websocket;
import java.io.IOException;
import java.util.concurrent.ConcurrentHashMap;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint(value = "/websocket/name")
public class WebSocket
/**
* 与某个客户端的连接对话,需要通过它来给客户端发送消息
*/
private Session session;
/**
* 用于存所有的连接服务的客户端,这个对象存储是安全的
*/
public static ConcurrentHashMap<String, WebSocket> webSocketSet = new ConcurrentHashMap<String, WebSocket>();
/**
* 标识当前连接客户端的用户名
*/
private String name;
public String getName()
return name;
/**
* @param session
* @param name 可以试着用uId
*/
@OnOpen
public void OnOpen(Session session, @PathParam(value = "name") String name)
this.session = session;
System.out.println(session.getId()+","+name);
this.name = name;
// name是用来表示唯一客户端,如果需要指定发送,需要指定发送通过name来区分
webSocketSet.put(name, this);
System.out.println("[WebSocket] 连接成功,当前连接人数为:="+ webSocketSet.size()+name);
@OnClose
public void OnClose()
webSocketSet.remove(this.name);
System.out.println("[WebSocket] 退出成功,当前连接人数为:="+webSocketSet.size()+webSocketSet.toString());
@OnMessage
public void OnMessage(String message)
System.out.println("[WebSocket] 收到消息:"+ message);;
try
sendMessage("接收的消息:"+message);
catch (IOException e)
e.printStackTrace();
@OnError
public void onError(Throwable error)
System.out.println("[WebSocket] 发生错误:"+ error.toString());
/**
* 群发
*
* @param message
*/
public void GroupSending(String message)
for (String name : webSocketSet.keySet())
try
webSocketSet.get(name).session.getBasicRemote().sendText(message);
catch (Exception e)
e.printStackTrace();
/**
* 指定发送
*
* @param name
* @param message
*/
public static void appointSending(String name, String message)
System.out.println(name);
try
webSocketSet.get(name).session.getBasicRemote().sendText(message);
catch (Exception e)
e.printStackTrace();
public static ConcurrentHashMap<String, WebSocket> getWebSocketSet()
return webSocketSet;
public void sendMessage(String message) throws IOException
System.out.println("消息===="+message);
this.session.getBasicRemote().sendText(message);
由于只是一次开发的记录,就不一一详解了,大家直接拿起来使用就行了,后面有机会我会继续分享关于服务端的开发学习过程的,大家晚安!
以上是关于简易服务端之Servlet实现Websocket消息通信的主要内容,如果未能解决你的问题,请参考以下文章