2013-03-26 4 views
27

मुझे इस तरह के एक अस्पष्ट सवाल पूछने से नफरत है, लेकिन मुझे एक साधारण उदाहरण खोजने में मुश्किल हो रही है। यहाँ मैं अब तक है:मैं एम्बेडेड वेबसॉकेट सर्वर जेटटी 9 कैसे बना सकता हूं?

public class JettyWebSocketServlet extends WebSocketServlet{ 
    @Override 
    public void configure(WebSocketServletFactory factory) { 
     factory.register(MyEchoSocket.class); 
    } 
} 

@WebSocket 
public class MyEchoSocket { 
    @OnWebSocketMessage 
    public void onText(WebSocketConnection conn, String message) { 
     System.out.println("text: " + message); 
     try { 
      conn.write(null, new FutureCallback(), "got: " + message); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

एम्बेडेड जेट्टी उदाहरण मैं पा सकते हैं हमेशा एक सर्वर उदाहरण चालू करवाने के लिए निम्नलिखित की तरह कुछ दिखाने के लिए,, लेकिन मैं अपने WebSocketServlet का दृष्टांत के लिए कैसे पता नहीं है।

 Server server = new Server(8080); 
     server.start(); 
     server.join(); 

मैं एक एम्बेडेड सर्वर कैसे बना सकता हूं जो वेबस्केट कनेक्शन अनुरोधों को संभाल सकता है?

उत्तर

33

अद्यतन: 2 दिसंबर, 2013

एक अप एंबेडेड जेट्टी की तारीख उदाहरण के लिए WebSocket साथ देखें:

https://github.com/jetty-project/embedded-jetty-websocket-examples

मूल उत्तर

एक उदाहरण है परीक्षण मामलों में पाया गया।

http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/jetty-websocket/websocket-server/src/test/java/org/eclipse/jetty/websocket/server/examples/echo/ExampleEchoServer.java

लघु उत्तर:

Server server = new Server(8080); 
WebSocketHandler wsHandler = new WebSocketHandler() 
    { 
     @Override 
     public void configure(WebSocketServletFactory factory) 
     { 
      factory.register(MyEchoSocket.class); 
     } 
    }; 
server.addHandler(wsHandler); 
server.start(); 
server.join(); 

यह एक साधारण सर्वर है कि 1 संदर्भ, जड़ संदर्भ संभालती पैदा करेगा।

http://localhost:8080/ 

यदि आप WebSocketHandler को किसी अन्य संदर्भ में बाध्य करना चाहते हैं, तो इसे कॉन्टेक्स्ट हैंडलर में लपेटें। , इस कोड का उपयोग करने की जरूरत नहीं है (यह कंटेनर जिम्मेदारी है)

1) इस मामले में:

Server server = new Server(8080); 
WebSocketHandler wsHandler = new WebSocketHandler() 
    { 
     @Override 
     public void configure(WebSocketServletFactory factory) 
     { 
      factory.register(MyEchoSocket.class); 
     } 
    }; 
ContextHandler context = new ContextHandler(); 
context.setContextPath("/echo"); 
context.setHandler(wsHandler); 
server.addHandler(context); 
server.start(); 
server.join(); 

यह

http://localhost:8080/echo/ 
+1

धन्यवाद, यह चाल है! अद्यतन के लिए –

+3

+1 जिसमें जेएसआर -356 – betomontejo

+0

के साथ एक उदाहरण शामिल है, मैं जूनिट के साथ एक परीक्षण लिखने की कोशिश कर रहा हूं। वेबस्केट सर्वलेट के साथ एक एम्बेडेड जेटी सर्वर शुरू करना प्रतीत होता है। हालांकि इसे '' 'कंटेनर से कनेक्ट करने का प्रयास कर रहा है। कनेक्टर (...)' '' java.util.concurrent फेंकता है। अस्वीकृत निष्पादन अपवाद: संगठन।[email protected] –

6

यहाँ करने के लिए अपने WebSocket बाध्य होगा सर्वलेट दृष्टिकोण है:

Server server = new Server(8080); 
       server.start(); 
       server.join(); 

2) सर्वलेट के लिए web.xml वर्णनकर्ता बनाएँ:

<!DOCTYPE web-app PUBLIC 
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
"http://java.sun.com/dtd/web-app_2_3.dtd" > 

<web-app> 
    <display-name>WebSocket application</display-name> 
    <servlet> 
     <servlet-name>servlet</servlet-name> 
     <servlet-class>com.example.websocket.JettyWebSocketServlet</servlet-class> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>servlet</servlet-name> 
     <url-pattern>/hello</url-pattern> 
    </servlet-mapping> 
</web-app> 
अब

, जब आप जे एस लिखें:

var ws = new WebSocket("ws://localhost:8080/hello"); 
ws.send("text"); 

संदेश आपके MyEchoSocket की onText विधि के साथ नियंत्रित किया जाता है

यहाँ अधिक समझ सर्वलेट्स के लिए ट्यूटोरियल है, tutorial

गुड लक।

संबंधित मुद्दे