javascript通过WebSocket将服务器时间推送到多个客户端
我想使用WebSocket将应该不断更新的服务器时间推送到多个客户端。我在下面给出的netbeans日志中遇到了一个错误。我应该做什么来将服务器时间推送到多个客户机上而不出现任何错误。 服务器代码:
package nikhil;
import java.io.IOException;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.Set;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import javax.websocket.OnOpen;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.server.PathParam;
import javax.websocket.DeploymentException;
@ServerEndpoint("/jnc")
public class WebSocketClockn {
static ScheduledExecutorService timer
= Executors.newSingleThreadScheduledExecutor();
private static Set<Session> allSessions;
DateTimeFormatter timeFormatter
= DateTimeFormatter.ofPattern("HH:mm:ss");
// @OnOpen
public void showTime(Session session) {
allSessions = session.getOpenSessions();
// start the scheduler on the very first connection
// to call sendTimeToAll every second
if (allSessions.size() == 1) {
timer.scheduleAtFixedRate(() -> sendTimeToAll(session), 0, 1, TimeUnit.SECONDS);
System.out.println("server is running");
}
}
private void sendTimeToAll(Session session) {
allSessions = session.getOpenSessions();
for (Session sess : allSessions) {
try {
sess.getBasicRemote().sendText("Local time: "
+ LocalTime.now().format(timeFormatter));
System.out.println("server is running");
} catch (IOException ioe) {
System.out.println(ioe.getMessage());
}
}
}
}
客户端代码:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>Getting server updates</h1>
<script type="text/javascript">
//window.onload = init;
var socket = new WebSocket("ws://localhost:8080/ServerPush/jnc");
socket.onopen = function () {
console.log('Opened connection 🎉');
}
socket.onmessage = function (event) {
console.log('typeof(event.data)');
document.getElementById("result").innerHTML = event.data + "<br>";
};
socket.onerror = function (event) {
console.log("Error ", event);
}
</script>
<div id="result"></div>
</body>
</html>
我在netbeans日志中遇到的错误是:
2018年2月14日10:13:18.431信息[http-nio-8080-exec-18]组织。阿帕奇。卡塔琳娜。果心标准上下文。已开始重新加载名为[/ServerPush]的上下文 2018年2月14日10:13:18.453信息[http-nio-8080-exec-18]组织。阿帕奇。卡塔琳娜。果心标准上下文。已完成重新加载名为[/ServerPush]的上下文 2018年2月14日10:13:21.572信息[http-nio-8080-exec-19]组织。阿帕奇。卡塔琳娜。果心标准上下文。已开始重新加载名为[/ServerPush]的上下文 2018年2月14日10:13:21.598信息[http-nio-8080-exec-19]组织。阿帕奇。卡塔琳娜。果心标准上下文。已完成重新加载名为[/ServerPush]的上下文 2018年2月14日10:13:21.847严重[http-nio-8080-exec-24]组织。阿帕奇。郊狼。AbstractProtocol$ConnectionHandler。处理读取请求时出错,已忽略 JAVAlang.NullPointerException 在org。阿帕奇。公猫websocket。波乔。波基。doOnOpen(PojoEndpointBase.java:58) 在org。阿帕奇。公猫websocket。波乔。PojoEndpointServer。onOpen(PojoEndpointServer.java:64) 在org。阿帕奇。公猫websocket。服务器WsHttpUpgradeHandler。init(WsHttpUpgradeHandler.java:133) 在org。阿帕奇。郊狼。AbstractProtocol$ConnectionHandler。进程(AbstractProtocol.java:800) 在org。阿帕奇。公猫util。网NioEndpoint$SocketProcessor。doRun(NioEndpoint.java:1376) 在org。阿帕奇。公猫util。网SocketProcessorBase。运行(SocketProcessorBase.java:49) 在爪哇。util。同时发生的线程池执行器。runWorker(ThreadPoolExecutor.java:1149) 在爪哇。util。同时发生的线程池执行器$Worker。运行(ThreadPoolExecutor.java:624) 在org。阿帕奇。公猫util。线程。TaskThread$WrappingRunnable。运行(TaskThread.java:61) 在爪哇。朗。丝线。运行(Thread.java:748)
共 (0) 个答案