2015-04-01 13 views
5

Tôi đã dành khá nhiều thời gian để tìm WebSocket khách hàng đơn giản java mà có thể làm việc với WSS và sẽ không trở thành một mớ hỗn độn ...tối thiểu java8 nio an toàn WebSocket client (WSS)

Tôi đã thử https://github.com/TooTallNate/Java-WebSocket

thêm phụ thuộc khi ông descirbes, sao chép SSLClientExample.java để kiểm tra nó với máy chủ echo websocket.org, nhưng có lỗi biên dịch tại dòng 84 không có phương pháp setSocket() ... (bị kẹt ở đây)

Tôi đã thử tyrus (có vẻ như đây là một thư viện lớn được phát triển trực tiếp bởi oracle) nhưng có vẻ như tôi cần phải có một số máy chủ ứng dụng đang chạy (websocket container) để có thể se it ...

Tôi tự hỏi whats rất khó khăn về websockets mà một trong những cần phải có netty hoặc glassfish hoặc grizly cho điều đó?

Tôi nghĩ rằng nó có thể thực hiện một bằng cách sử dụng SSLEngine (wss) và sdk thuần túy ... có điều gì đó tôi không biết về websockets? (tôi tưởng tượng nó rất giống ổ cắm thông thường)

Trả lời

15

nv-websocket-client là một thư viện WebSocket khách hàng mới viết bằng Java. Nó hỗ trợ wss và chỉ yêu cầu Java SE 1.5, vì vậy nó có thể chạy ngay cả trên Android.

Kích thước nv-websocket-client-1.3.jar (phát hành vào ngày 2015-05-06) là 62,854 byte và không yêu cầu bất kỳ phụ thuộc bên ngoài nào.

Dưới đây là ví dụ "wss".

import com.neovisionaries.ws.client.*; 

public class HelloWSS 
{ 
    public static void main(String[] args) throws Exception 
    { 
     // Connect to "wss://echo.websocket.org" and send "Hello." to it. 
     // When a response from the WebSocket server is received, the 
     // WebSocket connection is closed. 
     new WebSocketFactory() 
      .createSocket("wss://echo.websocket.org") 
      .addListener(new WebSocketAdapter() { 
       @Override 
       public void onTextMessage(WebSocket ws, String message) { 
        // Received a response. Print the received message. 
        System.out.println(message); 

        // Close the WebSocket connection. 
        ws.disconnect(); 
       } 
      }) 
      .connect() 
      .sendText("Hello."); 
    } 
} 

Blog
thư viện WebSocket client (Java SE 1.5+, Android)
http://darutk-oboegaki.blogspot.jp/2015/05/websocket-client-library-java-se-15.html

GitHub
https://github.com/TakahikoKawasaki/nv-websocket-client

javadoc 0.123. http://takahikokawasaki.github.io/nv-websocket-client/

Maven

<dependency> 
    <groupId>com.neovisionaries</groupId> 
    <artifactId>nv-websocket-client</artifactId> 
    <version>1.3</version> 
</dependency> 
+0

Cảm ơn, điều này rất tuyệt, cuối cùng tôi thấy api simi bình thường. – vach

+0

Tôi đang thêm nó như là phụ thuộc nhưng dường như nó không có trong repo công cộng, bạn có chắc là không có kho lưu trữ cụ thể nào được thêm vào không? Cũng có .connect() một cuộc gọi chặn không? – vach

+1

Bạn có thể tìm thấy nó trong [Kho lưu trữ trung tâm Maven] (http://search.maven.org/#artifactdetails|com.neovisionaries|nv-websocket-client|1.3|jar). các khối phương thức connect() cho đến khi WebSocket [bắt tay mở] (https://tools.ietf.org/html/rfc6455#section-4) được thực hiện. Sau khi bắt tay thành công, hai luồng nội bộ được bắt đầu và phương thức connect() trả về. Việc gửi và nhận khung WebSocket được thực hiện không đồng bộ. Xem Blog, JavaDoc hoặc README.md để biết chi tiết. –

1

Tyrus khách hàng không cần phải có một máy chủ ứng dụng! :)

Vui lòng xem Tyrus documentation và blogpost Reducing WebSocket client jar size with ProGuard (bạn có thể giảm xuống 500 kB với JDK 7+).

Giới thiệu về kích thước - nó có thể được thu nhỏ hơn nữa, nhưng với một số tái cấu trúc trong mã Tyrus. Việc so sánh WebSocket và socket đơn giản không phải là rất chính xác - socket đơn giản không cần thực hiện HTTP và (theo truyền thống) không có hỗ trợ NIO (đi kèm với Java 7). Một phần khác là thực hiện giao thức WebSocket, điều này không khó nhưng cũng không chỉ gửi byte [] đến dây - có một số bắt tay mở, khung báo hiệu và mã hóa/giải mã bắt buộc UTF-8. Vì vậy, tôi đoán bạn có thể tìm thấy thực hiện API đơn giản hơn, nhưng gắn bó với một cái gì đó được duy trì và là một phần của Java EE dường như không tệ đối với tôi - bạn có khả năng chọn thực hiện (Tyrus chỉ là một trong số chúng) , có những người khác) và khách hàng của bạn sẽ sẵn sàng đưa vào ứng dụng Java EE nếu điều đó sẽ xảy ra. (Biên tập viên lưu ý: Tôi làm việc trên Tyrus, vì vậy câu trả lời của tôi rất có thể là thiên vị).

+0

Tôi thích tyrus, rốt cuộc cả của nó được duy trì bởi kẻ oracle, nhờ các liên kết, tôi sẽ kiểm tra xem nó ra, và cố gắng ... nếu nó hoạt động i' ll đăng ở đây ... tôi chỉ cần hỗ trợ khách hàng websocket wss, không có bất kỳ cầu cảng nào hoặc bất kỳ loài cá nào :))) – vach

+0

Pavel Tôi có thể thấy bạn phát triển rất nhiều, hiện tại tôi đang gặp phải 2 vấn đề, hãy trợ giúp nếu bạn có thời gian. Bây giờ tôi cần phải cấu hình SSLContextConfigurator, mà không phải là phụ thuộc của tôi (tôi chỉ có bây giờ "tyrus-container-jdk-client" 1.10) những gì khác tôi cần? 2. Tôi thực sự không biết keystore/thruststore là gì, và làm cách nào để tạo chúng cho một miền cụ thể ... Tôi đã thêm thành công chứng chỉ ssl mới trong cacerts java nhưng điều này có vẻ khác ... Tôi có thể đọc ở đâu điều này? – vach

+2

bạn không cần phải đặt SSLContextConfigurator - nếu JDK của bạn được cấu hình đúng, nó sẽ được chọn tự động. SslContextConfigurator nằm trong mô-đun org.glassfish.tyrus: tyrus-client (vui lòng sử dụng cùng một phiên bản - 1.10 trong trường hợp của bạn). Và bạn cũng có thể hưởng lợi từ "gói độc lập tất cả trong một": org.glassfish.tyrus.bundles: tyrus-standalone-client-jdk; http://search.maven.org/#artifactdetails%7Corg.glassfish.tyrus.bundles%7Ctyrus-standalone-client-jdk%7C1.10%7Cjar. –

1

Hãy thử ứng dụng web-client-client đơn giản của Matthias. (Tôi chỉ là một trong những người theo dõi của anh ấy trên Twitter) Bạn có thể đồng ý ý định cơ bản của mình về dự án đó.

Từ https://github.com/matzew/simple-websocket-client

Các JSR 356 mô tả một API chuẩn cho WebSocket Server và khách hàng, nhưng API khách hàng là rất phức tạp. Dự án này nhằm mục đích cung cấp một khách hàng đơn giản.

BTW, bất kỳ ứng dụng WebSocket nào không yêu cầu máy chủ WebSocket và có thể viết ứng dụng khách của riêng bạn trên Java SE thuần túy. Tuy nhiên, vì dễ dàng tích hợp với các công nghệ khác là quan trọng hơn nhiều so với tính đơn giản, bạn có thể cảm thấy có một số ngữ cảnh cơ bản trông phức tạp và không cần thiết.

+1

Cảm ơn, cho liên kết, nhưng theo như tôi thấy nó không hỗ trợ kết nối an toàn wss đó là những gì tôi cần. – vach

Các vấn đề liên quan