最小的java8 nio安全websocket客户端(wss)

时间:2015-04-01 06:45:15

标签: java networking websocket java-8 tyrus

我花了很长时间才找到可以与wss一起使用的简单java websocket客户端,并且不会一团糟......

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

添加依赖,因为他说,复制SSLClientExample.java用websocket.org echo服务器测试它,但在第84行得到编译错误没有这样的方法setSocket()...(卡在这里)

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

我不知道对于那些需要有netty或glassfish或grizly的websockets来说有什么困难吗?

我认为可以使用SSLEngine(wss)和纯java sdk实现一个...有什么我不知道websockets? (我想它非常像普通的插座)

4 个答案:

答案 0 :(得分:18)

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

nv-websocket-client-1.3.jar(2015-05-06发布)的大小为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/

<强>的Maven

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

答案 1 :(得分:2)

Tyrus客户端不需要有appserver! :)

请参阅Tyrus documentation和blogpost Reducing WebSocket client jar size with ProGuard(使用JDK 7 +可以降低到500 kB)。

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

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

答案 2 :(得分:1)

尝试使用Matthias的simple-websocket-client。 (我只是他在推特中的一个追随者)你可能同意他对该项目的潜在意图。

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

  

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

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

答案 3 :(得分:0)

用于Java Webscoket API的GO,简单而优雅。