Java WebSocket 服务器 - 向客户端推送消息
Java WebSocket server - push message to client
我有一个 client/server websocket 解决方案,但非常规地,我希望服务器将更新推送到未启动的客户端。
在发送更新时,我还想避免使用某种间隔计时器,而是让它们由服务器端事件触发。
我看到这里已经提出了这个问题,但似乎没有人有一个优雅的解决方案。
How to implement push to client using Java EE 7 WebSockets?
在同一解决方案中,用户提供了类似于以下的建议,但我想知道如何从另一个 class?
调用 sendMessage(String message) 方法
@WebSocket
public static class EchoSocket
{
private org.eclipse.jetty.websocket.api.Session session;
private org.eclipse.jetty.websocket.api.RemoteEndpoint remote;
@OnWebSocketClose
public void onWebSocketClose(int statusCode, String reason)
{
this.session = null;
this.remote = null;
System.out.println("WebSocket Close: {} - {}" + statusCode + " : " + reason);
}
@OnWebSocketConnect
public void onWebSocketConnect(org.eclipse.jetty.websocket.api.Session session)
{
this.session = session;
this.remote = this.session.getRemote();
System.out.println("WebSocket Connect: {}" + session.toString());
this.remote.sendStringByFuture("You are now connected to " + this.getClass().getName());
}
@OnWebSocketError
public void onWebSocketError(Throwable cause)
{
System.out.println("WebSocket Error" + cause.getLocalizedMessage());
}
@OnWebSocketMessage
public void onWebSocketText(String message)
{
if (this.session != null && this.session.isOpen() && this.remote != null)
{
System.out.println("Echoing back text message [{}]" + message);
this.remote.sendStringByFuture(message);
}
}
public void sendMessage(String message) {
this.remote.sendStringByFuture(message);
}
}
如有任何建议,我们将不胜感激。
为了让任何感兴趣的人知道,对于我的特殊情况,我将我需要的所有实现都放入 onWebSocketConnect 方法中。
我不一定认为这是一个优雅的解决方案,但它为我解决了问题。
我的应用程序非常 "once off" 且专有,不会在正常的 client/server 网络应用程序上下文中推荐它。
我有一个 client/server websocket 解决方案,但非常规地,我希望服务器将更新推送到未启动的客户端。 在发送更新时,我还想避免使用某种间隔计时器,而是让它们由服务器端事件触发。
我看到这里已经提出了这个问题,但似乎没有人有一个优雅的解决方案。
How to implement push to client using Java EE 7 WebSockets?
在同一解决方案中,用户提供了类似于以下的建议,但我想知道如何从另一个 class?
调用 sendMessage(String message) 方法 @WebSocket
public static class EchoSocket
{
private org.eclipse.jetty.websocket.api.Session session;
private org.eclipse.jetty.websocket.api.RemoteEndpoint remote;
@OnWebSocketClose
public void onWebSocketClose(int statusCode, String reason)
{
this.session = null;
this.remote = null;
System.out.println("WebSocket Close: {} - {}" + statusCode + " : " + reason);
}
@OnWebSocketConnect
public void onWebSocketConnect(org.eclipse.jetty.websocket.api.Session session)
{
this.session = session;
this.remote = this.session.getRemote();
System.out.println("WebSocket Connect: {}" + session.toString());
this.remote.sendStringByFuture("You are now connected to " + this.getClass().getName());
}
@OnWebSocketError
public void onWebSocketError(Throwable cause)
{
System.out.println("WebSocket Error" + cause.getLocalizedMessage());
}
@OnWebSocketMessage
public void onWebSocketText(String message)
{
if (this.session != null && this.session.isOpen() && this.remote != null)
{
System.out.println("Echoing back text message [{}]" + message);
this.remote.sendStringByFuture(message);
}
}
public void sendMessage(String message) {
this.remote.sendStringByFuture(message);
}
}
如有任何建议,我们将不胜感激。
为了让任何感兴趣的人知道,对于我的特殊情况,我将我需要的所有实现都放入 onWebSocketConnect 方法中。 我不一定认为这是一个优雅的解决方案,但它为我解决了问题。 我的应用程序非常 "once off" 且专有,不会在正常的 client/server 网络应用程序上下文中推荐它。