依賴
<dependencies>
<dependency>
<groupId>org.java-websocket</groupId>
<artifactId>Java-WebSocket</artifactId>
<version>1.3.0</version>
</dependency>
</dependencies>
服務(wù)端
import org.java_websocket.WebSocket;
import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Author shiyangfan
* @Date 2020-02-19
**/
public class ServerDemo extends WebSocketServer {
private List<WebSocket> webSocketList = new ArrayList<WebSocket>();
private Map<WebSocket,String> webSocketStringMap = new HashMap<WebSocket, String>();
public ServerDemo() throws UnknownHostException {
}
public ServerDemo(int port) throws UnknownHostException {
super(new InetSocketAddress(port));
System.out.println("websocket服務(wù)端啟動(dòng):"+port);
}
/**
* 觸發(fā)連接事件
*/
@Override
public void onOpen(WebSocket conn, ClientHandshake clientHandshake) {
System.out.println("new connection :" + conn.getRemoteSocketAddress().getAddress().getHostAddress());
webSocketList.add(conn);
}
/**
* 連接斷開時(shí)觸發(fā)關(guān)閉事件
*/
@Override
public void onClose(WebSocket conn, int code, String reason, boolean remote) {
webSocketList.remove(conn);
for (WebSocket web:webSocketList) {
web.send(webSocketStringMap.get(conn)+"離開了聊天室");
webSocketStringMap.remove(conn);
}
}
/**
* 客戶端發(fā)送消息到服務(wù)器時(shí)觸發(fā)事件
*/
@Override
public void onMessage(WebSocket conn, String message) {
if(message.contains("%nick%")){
String nickname = message.replace("%nick%","");
webSocketStringMap.put(conn,nickname);
//向所有客戶端發(fā)送消息
for (WebSocket web:webSocketList) {
web.send(nickname+" 進(jìn)入了聊天室");
}
}else{
for (WebSocket web:webSocketList) {
web.send(webSocketStringMap.get(conn)+": "+message);
}
}
}
/**
* 觸發(fā)異常事件
*/
@Override
public void onError(WebSocket conn, Exception e) { }
/**
* 啟動(dòng)服務(wù)端
* @param args
* @throws UnknownHostException
*/
public static void main(String[] args) throws UnknownHostException {
new ServerDemo(9999).start();
}
}
客戶端
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>websocket 客戶端</title>
<style>
ul{
overflow: scroll;
width: 400px;
height: 200px;
padding-left: 5px;
}
li{
list-style: none;
}
</style>
</head>
<body>
<ul id="rev_info"></ul>
<input id="send_info" type="text" placeholder="輸入發(fā)送的內(nèi)容,回車">
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
var nickname = ""
function getNickname(){
nickname = prompt("請(qǐng)輸入你的昵稱:");
while(!nickname || nickname.trim()==""){
nickname = prompt("請(qǐng)輸入你的昵稱:");
}
}
//進(jìn)入聊天室,必須有個(gè)名字
getNickname();
// 創(chuàng)建一個(gè) websocket
var ws = new WebSocket("ws://localhost:9999");
//連接成功觸發(fā)
ws.onopen = function () {
ws.send("%nick%"+nickname)
};
//接收到消息觸發(fā)
ws.onmessage = function (evt) {
$("#rev_info").append("<li>" + evt.data + "</li>")
};
//關(guān)閉連接觸發(fā)
ws.onclose = function () { alert("連接已關(guān)閉..."); };
$("body").bind("keypress", function (e) {
if ((e.keyCode || e.which) == 13) {
ws.send($("#send_info").val())
$("#send_info").val("")
}
})
</script>
</body>
</html>
效果

image.png