2010-11-25 13 views
24

EDIT: सी # को संदर्भित किया गया क्योंकि एकमात्र स्वीकृत उत्तर जावा के बारे में है। अगर किसी को सी # में वेबस्केट सर्वर कार्यान्वयन के बारे में जानकारी चाहिए, तो एक नया प्रश्न पूछें।जावा में वेबस्केट उत्पादन तैयार सर्वर?

क्या आप जावा में वेबस्केट सर्वर बनाने के लिए "उत्पादन तैयार" ढांचे को जानते हैं? मुझे एक पुस्तकालय http://nugget.codeplex.com/ मिला लेकिन मुझे नहीं पता था कि यह स्थिर और तेज़ कैसे है।

उत्तर

35

जावा के लिए, यह informative post देखें। वहाँ से कॉपी-पेस्ट:

  • Jetty WebSocket Server - जेट्टी पिछले सितंबर के बाद WebSockets समर्थन किया है। यह एक अच्छा विकल्प प्रतीत होता है।
  • Caucho Resin
  • jWebSocket
  • ग्लासफिश/ग्रिजली (यह here पर एक DZone पोस्टिंग को देखने)
  • JBoss Netty (देखना पैच here)
  • Webbit

इन विकल्पों में से, मुझे लगता है कि जेट्टी और राल सबसे परिपक्व और स्थिर रहे हैं। हालांकि, हमेशा अपना परीक्षण करने के लिए अच्छा है।

+0

हे) ठीक) (i भरोसा कर सकते हैं यह अहसास है) मैं अपने जवाब स्वीकार किए जाते हैं;) धन्यवाद !;) – Edward83

2

Bristleback Framework पर एक नज़र डालें। यह जेटी, नेटटी या टोमकैट जैसे सामान्य रूप से उपयोग किए जाने वाले जावा वेबस्केट सर्वर के लिए एक उच्च स्तरीय ओवरले है। यदि आपको स्प्रिंग फ्रेमवर्क पसंद है, तो आपको निश्चित रूप से ब्रिस्टलबैक का प्रयास करना होगा!

अस्वीकरण: मैं ब्रिस्टलबैक फ्रेमवर्क प्रोजेक्ट में योगदानकर्ता हूं।

+0

voitec, क्या यह मुफ़्त है? – Edward83

+0

बेशक, परियोजना [गिटहब] (https://github.com/bristleback/bristleback) पर होस्ट की जाती है और एलजीपीएल के तहत लाइसेंस प्राप्त है। – voitec

+0

बहुत अच्छा, काम करते रहो! – Edward83

45

स्वीकृत उत्तर 3 साल पुराना है, हाल ही में जेईई 7 की रिलीज के साथ, अब सर्वर वेब लागू करने वाले प्रत्येक वेब कंटेनर मानक API (javax.websocket) पैकेज के माध्यम से वेबसाकेट का समर्थन करेंगे।

निम्नलिखित कोड शो उदाहरण कैसे JEE7 का उपयोग कर WebSocket लागू करने के लिए:

import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.websocket.OnClose; 
import javax.websocket.OnError; 
import javax.websocket.OnMessage; 
import javax.websocket.OnOpen; 
import javax.websocket.Session; 
import javax.websocket.server.ServerEndpoint; 

@ServerEndpoint(value = "/chat") 
public class ChatServer { 

    private static final Logger LOGGER = 
      Logger.getLogger(ChatServer.class.getName()); 

    @OnOpen 
    public void onOpen(Session session) { 
     LOGGER.log(Level.INFO, "New connection with client: {0}", 
       session.getId()); 
    } 

    @OnMessage 
    public String onMessage(String message, Session session) { 
     LOGGER.log(Level.INFO, "New message from Client [{0}]: {1}", 
       new Object[] {session.getId(), message}); 
     return "Server received [" + message + "]"; 
    } 

    @OnClose 
    public void onClose(Session session) { 
     LOGGER.log(Level.INFO, "Close connection for client: {0}", 
       session.getId()); 
    } 

    @OnError 
    public void onError(Throwable exception, Session session) { 
     LOGGER.log(Level.INFO, "Error for client: {0}", session.getId()); 
    } 
} 

विवरण here में उदाहरण।

वेब कंटेनर कि WebSocket समर्थन करते हैं:

+0

औपचारिक गायब या एपीआई का हिस्सा नहीं है? –

4

Vert.x विकल्प भी लायक है मानते हुए।

एक ws सर्वर बनाना के रूप में सरल रूप में

vertx.websocketHandler(new Handler<ServerWebSocket>() { 
    public void handle(ServerWebSocket ws) { 
     // A WebSocket has connected! 
    } 
}).listen(8080); 

या

vertx.createHttpServer().websocketHandler(new Handler<ServerWebSocket>() { 
     @Override 
     public void handle(final ServerWebSocket ws) { 
      logger.info("ws connection established with " + ws.remoteAddress()); 
      ws.dataHandler(new Handler<Buffer>() { 
       @Override 
       public void handle(Buffer data) { 
        JsonObject item = new JsonObject(data.toString()); 
        logger.info("data in -> " + item.encodePrettily()); 
         // if you want to write something back in response to the client 
        //ws.writeTextFrame(...); 
      } 
      }); 
     } 
    }).listen(port, new Handler<AsyncResult<HttpServer>>() { 
     @Override 
     public void handle(AsyncResult<HttpServer> event) { 
      logger.info("ws server is up and listening on port " + port); 
     } 
    }); 

अधिक जानकारी के लिए यहाँ देखो http://vertx.io/docs/vertx-core/java/#_websockets

तो एक Vert.x के साथ अपने ही WebSocket सर्वर लिख सकते हैं हो सकता है , इसे फतजार के रूप में पैकेज करें, और इसे अपने आप चलाएं।

या आप Vert.x env एम्बेड कर सकते हैं। अपने ऐप में, और अपने वर्टिकल (जो ws सर्वर लागू करता है) को प्रोग्रामेटिक रूप से तैनात करें।


एक और विकल्प जेबॉस का वेब सर्वर अंडरतोव है। जो अनुप्रयोगों में आसानी से एम्बेड करने योग्य है।

इन निर्भरता जोड़ें:

<dependency> 
    <groupId>io.undertow</groupId> 
    <artifactId>undertow-servlet</artifactId> 
    <version>${version.io.undertow}</version> 
</dependency> 

<dependency> 
    <groupId>io.undertow</groupId> 
    <artifactId>undertow-websockets-jsr</artifactId> 
    <version>${version.io.undertow}</version> 
</dependency> 

और यहाँ एक नमूना ws सर्वर है:

Undertow server = Undertow.builder() 
      .addHttpListener(8080, "localhost") 
      .setHandler(path() 
        .addPrefixPath("/myapp", websocket(new WebSocketConnectionCallback() { 

         @Override 
         public void onConnect(WebSocketHttpExchange exchange, WebSocketChannel channel) { 
          channel.getReceiveSetter().set(new AbstractReceiveListener() { 

           @Override 
           protected void onFullTextMessage(WebSocketChannel channel, BufferedTextMessage message) { 
            final String messageData = message.getData(); 
            for (WebSocketChannel session : channel.getPeerConnections()) { 
             WebSockets.sendText(messageData, session, null); 
            } 
           } 
          }); 
          channel.resumeReceives(); 
         } 
        })) 
      .build(); 

    server.start(); 
+0

Vert.x websockets प्रलेखन के लिए आपका लिंक मृत प्रतीत होता है। यह एक काम करता है: http://vertx.io/docs/vertx-core/java/#_websockets – Pampy

+0

@Pampy आप सही हैं मैं पुष्टि करता हूं। इसे अपडेट किया गया आपको बहुत - बहुत धन्यवाद! – aymens

0

Apache Tomcat 8.0 लागू करता WebSockets 1.1 एपीआई (JSR-356)। आप उदाहरण फ़ोल्डर में नेविगेट करके स्थापित करने के बाद उदाहरणों के साथ भी खेल सकते हैं: इको चैट और सांप गेम हैं।

0

घाट

मैं कैसे एक WebSocket सर्वर बनाने के लिए पिछले सप्ताह mauling के खर्च किया है। अंत में काम करने के लिए कुछ मिल गया उम्मीद है कि यह मदद करता है। यह जेट्टी (जार) से पुस्तकालयों का उपयोग करता है।

फ़ाइल WebRTC_IceServer.java

package com.evanstools; 
import org.eclipse.jetty.server.*; 
import org.eclipse.jetty.websocket.server.*; 
public class WebRTC_IceServer{ 
public static void main(String[] args){ 
try{ 
//////////////////////// 
if(args.length == 0){ 
    System.out.printf("%s%n","WebRTC_IceServer [port]"); 
    return; 
} 
Server server = new Server(Integer.parseInt(args[0])); 
WebSocketHandler.Simple webSocketHandlerSimple = new WebSocketHandler.Simple(WebsocketPOJO.class); 
server.setHandler(webSocketHandlerSimple); 
server.start(); 
server.join(); 
//////////////////////// 
}catch(Exception w){w.printStackTrace();} 
} 
} 

जेट्टी WebSockets की वजह से फ़ाइल WebsocketPOJO.java

package com.evanstools; 
import org.eclipse.jetty.websocket.api.annotations.*; 
import org.eclipse.jetty.websocket.api.Session; 
//The class must be not abstract and public. 
@WebSocket 
public class WebsocketPOJO{ 
//Flags one method in the class as receiving the On Connect event. 
//Method must be public, not abstract, return void, and have a single Session parameter. 
@OnWebSocketConnect 
public void onWebSocketConnect(Session session){ 
    System.out.printf("%s%n","test client connected"); 
} 
//Flags one method in the class as receiving the On Close event. 
//Method signature must be public, not abstract, and return void. 
//The method parameters: 
////Session (optional) 
////int closeCode (required) 
////String closeReason (required) 
@OnWebSocketClose 
public void OnWebSocketClose(Session session,int closeCode,String closeReason){} 
//Flags up to 2 methods in the class as receiving On Message events. 
//You can have 1 method for TEXT messages, and 1 method for BINARY messages. 
//Method signature must be public, not abstract, and return void. 
//The method parameters for Text messages: 
////Session (optional) 
////String text (required) 
//The method parameters for Binary messages: 
////Session (optional) 
////byte buf[] (required) 
////int offset (required) 
////int length (required) 
@OnWebSocketMessage 
public void onWebSocketMessageString(Session session, String text){} 
//Flags one method in the class as receiving Error events from the WebSocket implementation. 
//Method signatures must be public, not abstract, and return void. 
//The method parameters: 
////Session (optional) 
////Throwable cause (required) 
//@OnWebSocketError 
//Flags one method in the class as receiving Frame events from the WebSocket implementation after they have been processed by any extensions declared during the Upgrade handshake. 
//Method signatures must be public, not abstract, and return void. 
//The method parameters: 
////Session (optional) 
///Frame (required) 
//The Frame received will be notified on this method, then be processed by Jetty, possibly resulting in another event, such as On Close, or On Message. Changes to the Frame will not be seen by Jetty. 
//@OnWebSocketFrame 
} 
संबंधित मुद्दे