by Anonymous » 28 Feb 2025, 02:46
Ich versuche, Server als Java Plain Application zu implementieren, bei dem Clients eine Verbindung zu einem Web -Socket herstellen können. /> Dies ist App -Klasse: < /p>
Code: Select all
package com.main;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
public class App {
public static void main(String[] args) {
Server server = new Server(4550);
ServletContextHandler context = new
ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/api");
server.setHandler(context);
ServletHolder wsHolder = new ServletHolder(MyWebSocketServlet.class);
context.addServlet(wsHolder, "/");
try {
server.start();
server.join();
} catch (Exception e) {
e.printStackTrace();
} finally {
server.destroy();
}
}
}
< /code>
Dies ist MyWebSocketServlet -Klasse: < /p>
package com.main;
import org.eclipse.jetty.websocket.server.JettyWebSocketServlet;
import org.eclipse.jetty.websocket.server.JettyWebSocketServletFactory;
import jakarta.servlet.annotation.WebServlet;
@WebServlet(urlPatterns = "/myWebSocket")
public class MyWebSocketServlet extends JettyWebSocketServlet {
@Override
protected void configure(JettyWebSocketServletFactory factory) {
factory.register(MyWebSocketHandler.class);
}
}
< /code>
Und zuletzt MyWebSocketHandler -Klasse: < /p>
package com.main;
import org.eclipse.jetty.websocket.api.Session;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage;
import org.eclipse.jetty.websocket.api.annotations.WebSocket;
@WebSocket
public class MyWebSocketHandler {
@OnWebSocketConnect
public void onConnect(Session session) {
System.out.println("Connected: " + session.getRemoteAddress());
}
@OnWebSocketMessage
public void onMessage(Session session, String message) {
System.out.println("Message received: " + message);
try {
session.getRemote().sendString("Echo: " + message);
} catch (Exception e) {
e.printStackTrace();
}
}
@OnWebSocketClose
public void onClose(Session session, int statusCode, String reason) {
System.out.println("Closed: " + reason);
}
}
< /code>
In der Gradle -Build -Datei werden die folgenden Bibliotheken importiert: < /p>
implementation 'org.eclipse.jetty:jetty-server:11.0.7'
implementation 'org.eclipse.jetty:jetty-servlet:11.0.7'
implementation 'org.eclipse.jetty.websocket:websocket-jetty-server:11.0.7'
Es muss eine Java -Anwendung (kein Spring -Start oder ein anderes Framework) und (wenn möglich) Stegbibliothek zur Definition des WebSocket sein.
Ich versuche, Server als Java Plain Application zu implementieren, bei dem Clients eine Verbindung zu einem Web -Socket herstellen können. /> Dies ist App -Klasse: < /p>
[code]package com.main;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
public class App {
public static void main(String[] args) {
Server server = new Server(4550);
ServletContextHandler context = new
ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/api");
server.setHandler(context);
ServletHolder wsHolder = new ServletHolder(MyWebSocketServlet.class);
context.addServlet(wsHolder, "/");
try {
server.start();
server.join();
} catch (Exception e) {
e.printStackTrace();
} finally {
server.destroy();
}
}
}
< /code>
Dies ist MyWebSocketServlet -Klasse: < /p>
package com.main;
import org.eclipse.jetty.websocket.server.JettyWebSocketServlet;
import org.eclipse.jetty.websocket.server.JettyWebSocketServletFactory;
import jakarta.servlet.annotation.WebServlet;
@WebServlet(urlPatterns = "/myWebSocket")
public class MyWebSocketServlet extends JettyWebSocketServlet {
@Override
protected void configure(JettyWebSocketServletFactory factory) {
factory.register(MyWebSocketHandler.class);
}
}
< /code>
Und zuletzt MyWebSocketHandler -Klasse: < /p>
package com.main;
import org.eclipse.jetty.websocket.api.Session;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage;
import org.eclipse.jetty.websocket.api.annotations.WebSocket;
@WebSocket
public class MyWebSocketHandler {
@OnWebSocketConnect
public void onConnect(Session session) {
System.out.println("Connected: " + session.getRemoteAddress());
}
@OnWebSocketMessage
public void onMessage(Session session, String message) {
System.out.println("Message received: " + message);
try {
session.getRemote().sendString("Echo: " + message);
} catch (Exception e) {
e.printStackTrace();
}
}
@OnWebSocketClose
public void onClose(Session session, int statusCode, String reason) {
System.out.println("Closed: " + reason);
}
}
< /code>
In der Gradle -Build -Datei werden die folgenden Bibliotheken importiert: < /p>
implementation 'org.eclipse.jetty:jetty-server:11.0.7'
implementation 'org.eclipse.jetty:jetty-servlet:11.0.7'
implementation 'org.eclipse.jetty.websocket:websocket-jetty-server:11.0.7'
[/code]
Es muss eine Java -Anwendung (kein Spring -Start oder ein anderes Framework) und (wenn möglich) Stegbibliothek zur Definition des WebSocket sein.