作者:手机用户2502911483 | 来源:互联网 | 2023-08-12 19:13
一:创建maven webapp项目
编辑pom.xml文件
4.0.0
com.lala
tweet
1.0.0
war
UTF-8
2.2
1.2
3.0.1
4.1.7.RELEASE
4.12
org.springframework
spring-webmvc
${spring-framework.version}
javax.servlet
jstl
${jstl.version}
javax.servlet
javax.servlet-api
${servlet.version}
provided
javax.servlet.jsp
jsp-api
${jsp.version}
provided
junit
junit
${junit.version}
test
org.springframework
spring-websocket
${spring-framework.version}
com.google.code.gson
gson
2.3.1
org.apache.maven.plugins
maven-compiler-plugin
3.3
1.8
true
org.eclipse.jetty
jetty-maven-plugin
9.2.11.v20150529
foo
9999
9090
/
二:编写server endpoint
package com.lala.action;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;
import com.google.gson.Gson;
public class TweetWebSocket extends TextWebSocketHandler
{
private Map clients = new ConcurrentHashMap<>();
public void handleTextMessage(WebSocketSession session, TextMessage message)
{
if(!clients.containsKey(session.getId()))
{
clients.put(session.getId(), session);
}
String data = message.getPayload();
Gson g = new Gson();
Map datas = g.fromJson(data, Map.class);
String type = datas.get("type").toString();
if("1".equals(type))
{
datas.put("pcount", clients.keySet().size() + "");
}
else if("3".equals(type))
{
clients.remove(session.getId());
datas.put("pcount", clients.keySet().size() + "");
}
TextMessage tm = new TextMessage(g.toJson(datas));
sendToAll(tm);
}
private void sendToAll(TextMessage tm)
{
try
{
for(WebSocketSession session : clients.values())
{
if(session.isOpen())
{
session.sendMessage(tm);
}
else
{
clients.remove(session.getId());
}
}
}catch(Exception e)
{
e.printStackTrace();
}
}
}
三:mvn-servlet配置
index.jsp页面
<%@ page language="java" cOntentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
动弹列表
欢迎回来:${param.username},当前在线人数
最后,执行
mvn clean jetty:run
启动服务
在浏览器上面输入
http://127.0.0.1:9090/index.jsp?username=用户名
多开几个浏览器窗口,即可群聊
效果图为: