【问题标题】:How to communicate between a libwebsockets client and a websocket server like Nginx?如何在 libwebsockets 客户端和 Nginx 等 websocket 服务器之间进行通信?
【发布时间】:2017-03-14 17:48:31
【问题描述】:

我尝试实现一个 websocket 客户端(在 C 中使用 libwebsockets,这不是一个选项)。例如,我使用了库中提供的 test-client.c。 我的 websocket-client 实际上适用于 test-server.c 。但是我在与 nginx 服务器通信时遇到了一些复杂情况。

据我了解,handhack 的结果并不好,因为 nginx 不知道我的 websocket 客户端的子协议。 好吧,看起来,就像在 test-client.c 中我正在实现我自己的子协议(具有自己的名称,自己的回调函数)。

我的问题是:

  • 有没有办法不将特定的 websocket 子协议与 libwebsockets 一起使用?

  • 如果没有,我是否应该实现一个现有的(客户端),如 WAMPlist 中的某些东西?(我不想要重新发明轮子...)

  • 如果没有,它是否存在我可以指定给 nginx 并且可以与我的 websocket-client 兼容的“默认”websocket 子协议?(我只是在做与我的客户端进行一些简单的发送/接收操作。如果它只能与 libwebsockets 服务器通信,那么实现 libwebsockets 客户端似乎完全没用)

  • 我的问题是否相关?如果不是为什么?我错过了什么?

感谢任何帮助。 谢谢!

【问题讨论】:

    标签: nginx websocket network-programming protocols libwebsockets


    【解决方案1】:

    正如与 libwebsockets 设计者 (https://github.com/warmcat/libwebsockets/issues/834) 的 Andy 所讨论的,使其工作的最简单方法是不在定义 websocket 子协议客户端的结构中命名子协议:

    /* list of supported sub-protocols and callbacks */
    static struct lws_protocols ws_protocols[] = {
            { NULL, ws_callback, 0, 128, },
            { NULL, NULL, 0, 0 } /* end */
    };
    

    Libwebsockets 客户端不会尝试与标头中的sec-websocket-protocol 进行协商,握手与 nginx 配合得很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2020-06-12
      相关资源
      最近更新 更多