Java WebSocket实现简易聊天室
时间: 2023-08-14 07:06:32 浏览: 238
基于Websocket的简单聊天室
5星 · 资源好评率100%
Java WebSocket是一种用于实现双向通信的网络协议,可以帮助我们实现简易聊天室。下面是一个基于Java WebSocket实现的简易聊天室的示例代码:
首先,我们需要定义一个WebSocket处理程序:
```java
@ServerEndpoint("/chat")
public class ChatEndpoint {
private static Set<Session> sessions = Collections.synchronizedSet(new HashSet<Session>());
@OnOpen
public void onOpen(Session session) {
sessions.add(session);
}
@OnMessage
public void onMessage(String message, Session session) throws IOException {
for (Session s : sessions) {
// 过滤自己
if (!s.equals(session)) {
s.getBasicRemote().sendText(message);
}
}
}
@OnClose
public void onClose(Session session) {
sessions.remove(session);
}
}
```
在这个处理程序中,我们使用`@ServerEndpoint("/chat")`注解指定了WebSocket的端点,即`/chat`。在`onOpen`方法中,我们将新的会话添加到会话集合中。在`onMessage`方法中,我们将接收到的消息广播给所有其他会话。在`onClose`方法中,我们将关闭的会话从会话集合中移除。
接下来,我们需要在`web.xml`文件中配置WebSocket:
```xml
<web-app>
<display-name>WebSocket Chat</display-name>
<servlet>
<servlet-name>chat</servlet-name>
<servlet-class>org.glassfish.tyrus.servlet.TyrusServlet</servlet-class>
<init-param>
<param-name>org.glassfish.tyrus.servlet.websocketClassnames</param-name>
<param-value>com.example.ChatEndpoint</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>chat</servlet-name>
<url-pattern>/chat/*</url-pattern>
</servlet-mapping>
</web-app>
```
在这个配置中,我们使用了`org.glassfish.tyrus.servlet.TyrusServlet`作为WebSocket的Servlet。我们将`com.example.ChatEndpoint`指定为WebSocket处理程序的类名,并将其加载到`servlet`中。
现在,我们就可以在HTML页面中使用WebSocket来连接我们的聊天室了:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>WebSocket Chat</title>
</head>
<body>
<input type="text" id="message">
<button onclick="send()">Send</button>
<div id="output"></div>
<script>
var socket = new WebSocket('ws://localhost:8080/chat');
socket.onmessage = function (event) {
var output = document.getElementById('output');
output.innerHTML += event.data + '<br>';
};
function send() {
var message = document.getElementById('message').value;
socket.send(message);
}
</script>
</body>
</html>
```
在这个HTML页面中,我们创建了一个WebSocket连接到`ws://localhost:8080/chat`。当收到消息时,我们将其添加到页面上的`<div>`元素中。当点击发送按钮时,我们将输入框中的文本发送到WebSocket连接中。
这样,我们就完成了一个简易的Java WebSocket聊天室的实现。
阅读全文