1

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

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

我的问题是:

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

  • 如果没有,我是否应该实现一个现有的(客户端),如WAMP或此列表中的其他内容?(我不想重新发明轮子……)

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

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

任何帮助表示赞赏。谢谢!

4

1 回答 1

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 配合得很好。

于 2017-03-28T12:58:44.993 回答