Javascript 如何在WebSockets Java中启动服务器端消息?

Javascript 如何在WebSockets Java中启动服务器端消息?,javascript,java,websocket,Javascript,Java,Websocket,我正在Java中使用javax.websocketAPI。我正在为客户端使用Jetty服务器和Javascript。如何从服务器启动sendMessage 详细信息:我正在使用jetty maven插件9.4.8.v20171121 服务器端依赖项:org.eclipse.jetty.websocket-websocketserver和javaxwebsocketserver impl 这是我的服务器代码: package com.trice.server.web; import javax.

我正在Java中使用javax.websocketAPI。我正在为客户端使用Jetty服务器和Javascript。如何从服务器启动sendMessage

详细信息:我正在使用jetty maven插件9.4.8.v20171121

服务器端依赖项:org.eclipse.jetty.websocket-websocketserver和javaxwebsocketserver impl

这是我的服务器代码:

package com.trice.server.web;

import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.server.ServerEndpoint;

@ServerEndpoint("/WebSocketTestServlet")
public class WebSocketTestServlet {

    @OnOpen
    public void onOpen(){
        System.out.println("Open Connection ...");
    }

    @OnClose
    public void onClose(){
        System.out.println("Close Connection ...");
    }

    @OnMessage
    public String onMessage(String message){
        System.out.println("Message from the client: " + message);
        String echoMsg = "Echo from the server : " + message;
        return echoMsg;
    }

    @OnError
    public void onError(Throwable e){
        e.printStackTrace();
    }
}
和客户端代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Tomcat WebSocket</title>
</head>
<body>
    <form>
        <input id="message" type="text">
        <input onclick="wsSendMessage();" value="Echo" type="button">
        <input onclick="wsCloseConnection();" value="Disconnect" type="button">
    </form>
    <br>
    <textarea id="echoText" rows="5" cols="30"></textarea>
    <script type="text/javascript">
        var webSocket = new WebSocket("ws://localhost:8080/WebSocketTestServlet");
        var echoText = document.getElementById("echoText");
        echoText.value = "";
        var message = document.getElementById("message");
        webSocket.onopen = function(message){ wsOpen(message);};
        webSocket.onmessage = function(message){ wsGetMessage(message);};
        webSocket.onclose = function(message){ wsClose(message);};
        webSocket.onerror = function(message){ wsError(message);};
        function wsOpen(message){
            echoText.value += "Connected ... \n";
        }
        function wsSendMessage(){
            webSocket.send(message.value);
            echoText.value += "Message sent to the server : " + message.value + "\n";
            message.value = "";
        }
        function wsCloseConnection(){
            webSocket.close();
        }
        function wsGetMessage(message){
            echoText.value += "Message received from to the server : " + message.data + "\n";
        }
        function wsClose(message){
            echoText.value += "Disconnect ... \n";
            console.log("disconnect", message);
        }

        function wsError(message){
            echoText.value += "Error \n";
            console.log("error", message);
        }
    </script>
</body>
</html>

TomcatWebSocket

var webSocket=newwebsocket(“ws://localhost:8080/WebSocketTestServlet”); var echoText=document.getElementById(“echoText”); echoText.value=“”; var message=document.getElementById(“消息”); webSocket.onopen=函数(消息){wsOpen(消息);}; webSocket.onmessage=函数(消息){wsGetMessage(消息);}; webSocket.onclose=函数(消息){wsClose(消息);}; webSocket.onerror=函数(消息){wsError(消息);}; 函数wsOpen(消息){ echoText.value+=“已连接…\n”; } 函数wsSendMessage(){ 发送(message.value); echoText.value+=“发送到服务器的消息:”+Message.value+“\n”; message.value=“”; } 函数wsCloseConnection(){ webSocket.close(); } 函数wsGetMessage(消息){ echoText.value+=“从接收到服务器的消息:”+Message.data+“\n”; } 函数wsClose(消息){ echoText.value+=“断开连接…\n”; 控制台日志(“断开”,消息); } 函数wsError(消息){ echoText.value+=“错误\n”; console.log(“错误”,消息); }
参考文献


谢谢你的帮助。谢谢。

我的问题有一个非常简单的答案。我所需要做的就是:

session.getBasicRemote().sendText("Some string");

您的问题遗漏了一些信息:您希望在什么条件下发送消息?收到另一条消息后?在一件事上?无论如何,对于一个基本的答案,a将执行:
session.getBasicRemote().sendText(“yahooo!”)我想在事件发生时发送一条消息。根据您的回答,这是一件简单的事情。。。顺便说一句,如果您计划在
ServerEndpoint
中使用CDI事件(
@contracts
),请注意,如果未连接websocket客户端,您可能会遇到一些问题。在我的项目中,我们使用一个会话处理程序类来处理CDI事件在我有限的经验中,我没有遇到CDI事件…你能详细说明一下吗?任何具体的例子都能让你对这件事有所了解…谢谢如果你有空,我宁愿在聊天室里聊天:(我是聊天新手…)你如何获得会话对象@raksheetbhatDefine一个websocket ServerEndpoint,它定义回调方法-
@OnOpen public void OnOpen(Session wsSession,@PathParam(“param”)final String param)
,它为您提供一个websocket.Session对象。我之前看过这篇文章。在这种情况下,通过接收来自用户2的消息来发起向用户2发送消息。所以它不是纯粹从服务器端启动的。在我的例子中,就像异步批处理作业完成后,我需要向浏览器发送一条消息。在这种情况下,我们如何获取会话?您可以在服务器端维护用户会话列表,并在需要向所有活动用户发送消息时检索这些会话。或者使用userid维护一个hashmap,这样您就可以检索特定用户的会话。