标签: libwebsockets

WebSockets服务器架构如何工作?

我正在努力更好地理解服务器端架构如何为WebSockets工作,目标是在嵌入式应用程序中实现它.似乎这里有3种不同的服务器端软件组件:1)服务于静态HTTP页面和处理升级请求的Web服务器,2)用于处理WebSockets通信"细节"的WebSockets库,如libwebsockets ,3)我的自定义应用程序,以实际弄清楚如何处理传入的数据.这些如何组合在一起?是否有一个单独的Web服务器和WebSocket处理部分,即WebSocket服务器/守护程序?

我的应用程序如何与Web服务器和/或WebSockets库通信以发送/接收数据?例如,使用CGI,Web服务器使用环境变量将信息发送到自定义应用程序,使用stdout接收响应.这里的等效通信系统是什么?或者您通常将WebSocket库链接到客户应用程序中?但那么如何与Web服务器通信到WebSocket库+自定义应用程序呢?或者所有3个组合成一个组件?

这就是我要问的原因.我在具有有限内存的Blackfin处理器上的uClinux/no MMU平台上使用boa Web服务器.boa中没有本机WebSocket支持,只有CGI.我试图找出如何添加WebSockets支持.我更喜欢使用编译的解决方案,而不是像JavaScript,Python或PHP这样的解释.我当前的应用程序使用CGI的长轮询,这不能为计划的增强提供足够的性能.

websocket libwebsockets

17
推荐指数
1
解决办法
1万
查看次数

Libwebsocket客户端示例

我试图找到一个例子,它将解释我如何使用libwebsocket实现Client,但我没有得到任何令人信服的代码.有什么链接我可以参考吗?

c libwebsockets

16
推荐指数
2
解决办法
3万
查看次数

如何在linux中安装libwebsocket库?

我正在尝试在我的ubuntu中安装libwebsocket.

所以我下载了项目https://github.com/warmcat/libwebsockets解 压缩它,我按照安装说明.

我键入命令cmake FH并获取以下消息.

  You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:State or Province Name …
Run Code Online (Sandbox Code Playgroud)

c installation libwebsockets

10
推荐指数
1
解决办法
2万
查看次数

WebSockets 在桌面浏览器中工作,但在 Chrome for Android 中失败

我有一个通过 WebSockets 连接到服务的网络应用程序。此应用在桌面版 Chrome/Firefox 中运行良好,但移动版 Chrome 出现错误:

WebSocket 连接到“ws://192.168.0.11:8080/”失败:一个或多个保留位打开:reserved1 = 0,reserved2 = 1,reserved3 = 0

服务器使用最新版本的libwebsockets

此错误发生在初始连接期间,随后通过多个 2048 字节帧将中等大的 JSON 数据堆发送到客户端。

服务器公开了几个不同的 WebSocket。其中一些也以其他方式失败:

无法将文本框架解码为 UTF-8。

...和...

无法识别的帧操作码:6

一种预测哪些应该失败,哪些应该成功的模式尚未显露出来。

我怀疑这里存在某种框架问题。我已经查看了 WireShark 中的消息,在我看来它们是正确的。标题似乎是正确的。

为什么这会在桌面 Chrome/Firefox 中工作,但在 Android 版 Chrome 中失败?

google-chrome websocket libwebsockets

5
推荐指数
1
解决办法
9039
查看次数

设置CLion构建和二进制目录

我正在尝试在我的项目中在CLion中构建libwebsockets.在构建期间,libwebsockets会创建其他文件所需的头文件,并将其放在PROJECT_BINARY_DIR中.CLion在为项目创建的随机构建目录中构建所有内容,并且头文件最终在该目录中.我试过了:

  • 设置websockets_BINARY_DIR变量
  • 设置CMAKE_RUNTIME_OUTPUT_DIRECTORY变量
  • 设置CMAKE_LIBRARY_OUTPUT_DIRECTORY变量
  • 更改CMake缓存中的每个变量以指向远离CLion的随机目录
  • 在CLion的首选项中更改构建输出路径设置

这些都不起作用,这引出了我的问题:

  • 有没有办法告诉CLion在哪里构建(不仅仅是在哪里放置一些输出但是如何覆盖它选择的随机目录).
  • 如果没有办法告诉CLion在哪里构建,那么我应该设置另一个变量吗?

cmake libwebsockets clion

5
推荐指数
1
解决办法
4078
查看次数

libwebsocket:发送有效载荷有限的大消息

我使用libwebsocket在C ++中实现了一个websocket客户端。
我想发送大消息,但我将消息有效负载限制为8K,我需要使用该有效负载值。
这是我的初始化代码的片段:

void
WSManager::initProtocols(void)
{
    memset(protocols, 0, sizeof(protocols));
    protocols[0].name = "default";
    protocols[0].callback = callback;
    protocols[0].per_session_data_size = 1500;
    protocols[0].rx_buffer_size = 8000;

    /* End of the list */
    protocols[1].name = NULL;
    protocols[1].callback = NULL;
    protocols[1].per_session_data_size = 0;
    protocols[1].rx_buffer_size = 0;
}
Run Code Online (Sandbox Code Playgroud)

现在的问题是如何发送大于8K的消息。
有没有一种方法可以缓冲数据,或者我必须使用fraggle

c++ linux libwebsockets

5
推荐指数
1
解决办法
1110
查看次数

websocket具体是如何工作的?

有一个很棒的答案,详细介绍了 REST api 的工作原理。

Websocket 如何以类似的细节工作?

websocket socket.io spring-websocket libwebsockets java-websocket

5
推荐指数
1
解决办法
977
查看次数

当 pollfd 在另一个线程上更改时,Linux 和 OS X 之间 poll() 的差异

我试图让 libwebsockets 在 OS X 上的多线程环境中运行。我无法触发从与主服务线程不同的线程发送数据。在 libwebsocket 文档上暗示这应该是可能的(演示代码邮件列表)。于是我深入研究代码,发现问题出在 poll() 函数中。

struct pollfd对于作为参数给出的参数,poll() 的行为似乎有所不同。libwebsockets 依赖于在 poll() 处于活动状态时更改 fds.event 字段的可能性。这在 Linux 上运行良好,但在 OS X 上不起作用。

我编写了一个小测试程序来演示该行为:

#include <unistd.h>
#include <netdb.h>
#include <poll.h>
#include <iostream>
#include <thread>

#define PORT "3490"

struct pollfd    fds[1];
bool connected = false;

void main_loop() {
    int sockfd, new_fd; 
    struct addrinfo hints, *servinfo, *p;
    socklen_t sin_size;
    int yes=1;
    char s[INET6_ADDRSTRLEN];
    int rv;

    memset(&hints, 0, sizeof hints);
    hints.ai_family = AF_INET;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_flags = …
Run Code Online (Sandbox Code Playgroud)

sockets linux macos multithreading libwebsockets

4
推荐指数
1
解决办法
1377
查看次数

如何在 libwebsockets 回调中设置用户自定义指针?

如何在 libwebsockets 回调中设置用户自定义指针?

我在 lws_protocol 中添加了一个指针变量。

当回调函数被调用时,用户指针始终为NULL。

我使用 libwebsockets v3.0。

static int interrupted, rx_seen, test;
int ws_callback(struct lws *ws, enum lws_callback_reasons reason, void *user, void *in, size_t len) {
  // user is NULL

  return lws_callback_http_dummy(ws, reason, user, in, len);
}

int main() {
    struct lws *ws;
    struct lws_context_creation_info context_info;
    struct lws_client_connect_info client_info;
    struct lws_context *context;
    struct lws_protocols protocols[] = {
            { "ws_callback", ws_callback, 0, 0, 0, POINTER_VARIABLE /* HERE */, 0 }
    };

    int n = 0;

    // context creation …
Run Code Online (Sandbox Code Playgroud)

c libwebsockets

4
推荐指数
1
解决办法
1844
查看次数

libwebsocket发送有效负载限制

我有libwebsocket客户端发送二进制数据.我已将二进制数据保存到缓冲区[即buf]并写入套接字.

n = libwebsocket_write(wsi,
       &buf[LWS_SEND_BUFFER_PRE_PADDING], l, opts | LWS_WRITE_BINARY);
Run Code Online (Sandbox Code Playgroud)

我的问题是socket只能写22392个字节[因为我收到了n = 22392].当我的l> = 22392字节时,它被注意为部分写入.此值因各种体系结构而异.

题:

  • libwebsocket中的数据大小是否有限制?

  • 有什么方法可以扩展缓冲区的有效负载值

c networking websocket libwebsockets

2
推荐指数
1
解决办法
2499
查看次数

与HiveMQ 2.1.0 + Eclipse Paho javascript mqttws31.js的Websocket连接错误

在Google Chrome上执行mqttws31.js作为HTML文件的一部分时,我遇到以下错误.

HiveMQ用作MQTT代理,日志如下

2014-10-28 14:46:45,043 INFO  - HiveMQ home directory: E:\hivemq-2.1.0
2014-10-28 14:46:45,065 INFO  - Starting HiveMQ Server
2014-10-28 14:46:48,249 WARN  - No license file found. Using free personal licensing with  restrictions to 25 connections.
2014-10-28 14:46:48,367 INFO  - Activating statistics callbacks with an interval of 60 seconds
2014-10-28 14:46:48,368 INFO  - Activating $SYS topics with an interval of 60 seconds
2014-10-28 14:46:48,728 INFO  - Starting on address 127.0.0.1 and port 1883
2014-10-28 14:46:48,734 INFO  - Started HiveMQ 2.1.0 in …
Run Code Online (Sandbox Code Playgroud)

mqtt hivemq libwebsockets paho

1
推荐指数
1
解决办法
1652
查看次数