9

我花了相当长的时间来寻找可以与 wss 一起使用并且不会一团糟的简单 java websocket 客户端......

我试过https://github.com/TooTallNate/Java-WebSocket

在他描述时添加了依赖项,复制了 SSLClientExample.java 以使用 websocket.org 回显服务器对其进行测试,但在第 84 行出现编译错误,没有这样的方法 setSocket()...(卡在这里)

我尝试了 tyrus(似乎这是一个由 oracle 直接开发的大型库),但似乎我需要运行一些应用服务器(websocket 容器)才能使用它......

我想知道 websockets 有什么困难,以至于需要有 netty 或 glassfish 或 grizly 呢?

我认为可以使用 SSLEngine (wss) 和纯 java sdk 来实现一个……关于 websockets 有什么我不知道的吗?(我想它很像普通的插座)

4

4 回答 4

22

nv-websocket-client是一个用 Java 编写的新 WebSocket 客户端库。它支持wss并且只需要 Java SE 1.5,因此它甚至可以在 Android 上运行。

(2015-05-06 发布)的大小nv-websocket-client-1.3.jar为 62,854 字节,不需要任何外部依赖。

下面是一个“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.");
    }
}

博客
WebSocket 客户端库(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
http://takahikokawasaki.github.io/nv-websocket-client/

马文

<dependency>
    <groupId>com.neovisionaries</groupId>
    <artifactId>nv-websocket-client</artifactId>
    <version>1.3</version>
</dependency>
于 2015-05-06T06:50:50.737 回答
3

Tyrus客户端不需要应用服务器!:)

请参阅Tyrus 文档和博文使用 ProGuard 减少 WebSocket 客户端 jar 大小(使用 JDK 7+ 可以降低到 500 kB)。

关于大小 - 它可以进一步最小化,但在 Tyrus 代码中进行了一些重构。WebSocket 和普通套接字的比较不是很准确——普通套接字不需要实现 HTTP,并且(传统上)没有 NIO 支持(Java 7 附带)。另一部分是 WebSocket 协议实现,这并不难,而且它不仅仅是将 byte[] 发送到线路 - 还有一些开放的握手、信号帧和强制的严格 UTF-8 编码/解码。

所以我想你可以找到更简单的 API 实现,但是坚持一些维护的东西并且是 Java EE 的一部分对我来说似乎并不坏——你可以选择实现(Tyrus 只是其中之一,还有其他的) 并且您的客户端将准备好包含在 Java EE 应用程序中,如果这种情况发生的话。(编者注:我在 Tyrus 工作,所以我的回答很可能有偏见)。

于 2015-04-01T07:38:50.467 回答
0

试试 Matthias 的 simple-websocket-client。(我只是他在 Twitter 上的追随者之一)你可能同意他对该项目的潜在意图。

来自https://github.com/matzew/simple-websocket-client

JSR 356 描述了 WebSocket 服务器和客户端的标准 API,但客户端 API 非常复杂。该项目旨在提供一个简化的客户端。

顺便说一句,任何 WebSocket 客户端都不需要 WebSocket 服务器,并且可以在纯 Java SE 上编写自己的客户端。但是,由于易于与其他技术集成比简单性更重要,因此您可能会觉得有些潜在的上下文看起来很复杂且不必要。

于 2015-04-01T14:25:16.320 回答
0

GO for Java Webscoket API,简单优雅。

于 2020-03-28T03:41:25.230 回答