问题标签 [libwebsockets]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
943 浏览

c - Libwebsockets 2.1.0 - 在外部执行 lws_write 是非法的

我正在使用libwebsockets-2.1.0并启用generic session&lwsws选项。

case LWS_CALLBACK_SERVER_WRITEABLE我有一些代码可以打开一个文件,并将内容输出到 websocket。

在终端中,我得到了一堆这些:

这个错误有解释吗?我的意思是,我已经宣布char line[1000],但它仍在抱怨。

需要指出的是,websocket的最终输出是不一致的,有时停在line 30-something,有时停在line 400

FWIW,我正在阅读的文件的总行是1758行,一行的最长字符长度是107 个字符。

删除fgets循环并用我自己的通用值替换该值似乎工作正常。

谢谢

0 投票
1 回答
2928 浏览

javascript - 无法通过 Websocket 连接到 Mosquitto

我无法通过 Websocket 从 JavaScript 客户端连接到本地 Mosquitto 1.4.10 代理。

同一个 JavaScript 客户端通过 Websocket 成功连接到端口 8080 上 test.mosquitto.org 上的公共代理。

端口 1883 上的 MQTT 协议连接工作正常,我使用 mosquitto_pub 和 mosquitto_sub 进行了测试。

我的代理设置在运行 Ubuntu 14.04 的 VirtualBox 中。

我在同一台虚拟机上安装了 libwebsockets。

我的本地代理是在config.mk文件中使用WITH_WEBSOCKETS:=yes编译的

我正在从 Firefox 浏览器的同一虚拟机加载 JavaScript 客户端网页,并在浏览器控制台中看到以下错误消息:

Firefox 无法在 ws://localhost:8080/mqtt 建立与服务器的连接

您对解决此问题的建议将不胜感激。

谢谢。

这是我的 Mosquitto .conf 文件:

这是 Mosquitto 服务器的日志(websockets 日志记录级别设置为 1023,并且详细日志记录已打开 - 当我加载 JavaScript 网页时没有出现任何消​​息):

1481381105:从 1481381105 开始的 mosquitto 版本 1.4.10(构建日期 2016-12-10 18:47:37+0530)
:从 /etc/mosquitto/mosquitto.conf 加载配置。
1481381105:在端口 8080 上打开 websockets 侦听套接字。
1481381105:初始日志记录级别 1023

1481381105:Libwebsockets 版本:2.1.0 manavkumarm@manav-alljoyn

1481381105:IPV6 未在
1481381105 中编译:libev 支持未在
1481381105 中编译:libuv 支持未在
1481381105 中编译:线程:1 每个 1024 fds
1481381105:mem:平台 fd 映射:4096 字节
1481381105:使用 OpenSSL 编译
的默认值 1105:创建 Vhost 4818 18支持' 端口 8080,3 个协议,IPv6 关闭
1481381105:使用非 SSL 模式
1481381105:在端口 8080 上
侦听 1481381105:mem:per-conn:376 字节 + 协议 rx buf
1481381105:canonical_hostname = mqtt
1481381105:在端口 18 上打开 ipv4 侦听套接字 3 .
1481381105:在端口 1883 上打开 ipv6 侦听套接字。

以下是 JavaScript 源代码:

0 投票
0 回答
489 浏览

c - Libwesocket 客户端+服务器合二为一

我目前正在构建一个 C Tasker,该程序的目标是通过 Websockets 连接到主服务器并尽可能保持连接活动(客户端看门狗)。

同时,Tasker 应该能够从客户端(服务器行为)接收 Json,相应地处理它们并回答。

为此,我使用 GLib 的多线程方法和网络部分的 Libwebsockets 库。

C 客户端/服务器 Tasker 运行良好,因此下一步应该是:当与主服务器的连接丢失时,尝试“永远”重新连接,直到主服务器启动,或者在另一个主服务器上回退。

这里的问题是,当我切断与服务器的连接时,看门狗线程似乎忽略了重新连接。由于线程与 libwesockets 回调完全隔离。

以下是代码片段:

在Tasker Server init中调用Tasker Client

塔斯克服务器配置

塔斯克客户端配置

整数

Tasker 客户端看门狗线程调用

Finnaly The Tasker Client 线程例程循环和线程循环执行代码

如果需要任何进一步的精度让我知道,我也可以上传到 github 以便更好地阅读,任何帮助或提示将不胜感激:)。

0 投票
1 回答
3043 浏览

mobile - Web 套接字还是 XMPP?哪个更适合移动应用程序制作聊天应用程序

我想创建一个聊天应用程序。我的聊天应用程序使用连续轮询和推送数据在 Web 服务器上作为实时聊天正常工作。但是,轮询对于移动应用程序来说并不是一个好的解决方案。因为,我们的整个聊天都已经构建为 HTTP Rest API,所以迁移到 XMPP 对我们来说意义重大。

所以,我们刚刚了解了WebSocket。谁能建议我在这种情况下哪个更适合实时聊天。WebSocket 非常快,我们也不需要从服务器进行连续的计时器轮询。

如果有的话,请建议更好的选择,谢谢:)

0 投票
1 回答
507 浏览

linux - 使用 libwebsockets 编译 Mosquitto 1.4.8 时出错

安装 libwebsockets 1.4 后,我想让 Mosquitto 1.4.8 运行 wwitch Websockets。但是当我编译我得到一些错误:

user@Mate:~/Dokumente/mosquitto-1.4.8$ make

设置-e; 对于 lib 客户端 src 中的 d;做 -C ${d}; 完毕

make[1]: 进入目录 »/home/user/Dokumente/mosquitto-1.4.8/lib«

使-C cpp

make[2]: 进入目录 »/home/user/Dokumente/mosquitto-1.4.8/lib/cpp«

make[2]: 对目标 »all« 无事可做。

make[2]: 离开目录 »/home/user/Dokumente/mosquitto-1.4.8/lib/cpp«

make[1]: 离开目录 »/home/user/Dokumente/mosquitto-1.4.8/lib«

make[1]: 进入目录 »/home/user/Dokumente/mosquitto-1.4.8/client«

make[1]: 对目标 »all« 无事可做。

make[1]: 离开目录 »/home/user/Dokumente/mosquitto-1.4.8/client«

make[1]: 进入目录 »/home/user/Dokumente/mosquitto-1.4.8/src«

cc mosquitto.o bridge.o conf.o context.o database.o logging.o loop.o memory_mosq.o persist.o net.o net_mosq.o read_handle.o read_handle_client.o read_handle_server.o read_handle_shared.o security.o security_default .o send_client_mosq.o send_mosq.o send_server.o service.o subs.o sys_tree.o time_mosq.o tls_mosq.o util_mosq.o websockets.o will_mosq.o -o mosquitto -ldl -lm -lrt -Wl,--dynamic -list=linker.syms -lssl -lcrypto -luuid -lwebsockets loop.o:

在函数“do_disconnect”中:

/home/user/Dokumente/mosquitto-1.4.8/src/loop.c:404:未定义对“lws_callback_on_writable”loop.o的引用:

在函数“mosquitto_main_loop”中:/home/user/Dokumente/mosquitto-1.4.8/src/loop.c:378:未定义对“lws_service”的引用

collect2:错误:ld 返回 1 个退出状态

make[1]: *** [mosquitto] 错误 1

make[1]: 离开目录 »/home/user/Dokumente/mosquitto-1.4.8/src«

make: *** [mosquitto] 错误 2

信息:两天前我在没有 Websockets 的情况下测试了 Mosquitto,它运行良好,但是当我想再次编译它时(无论我是否选择 Websockets)我得到了这些错误。

0 投票
2 回答
2189 浏览

java - Jboss EAP 6.4 - Websocket 500 内部服务器错误

=== Java 控制台日志 ===

=== HTML 代码 ===

=== Javascript 代码 ===

=== Java 类代码 ===

库和 XML 文件

jboss-web.xml

浏览器:网络 > WS > 标题

=== 一般 ===

=== 请求标头 ===

=== 响应头 ===

=== 标签框 ===

0 投票
1 回答
3995 浏览

c - 如何使用 Libwebsockets 启用调试日志记录?

我正在尝试实现一个 websocket 客户端(在 C 中使用 libwebsockets)。我正在使用 cmake 来控制软件编译过程。

我的问题很简单:如何使用 Libwebsockets 启用调试日志记录?

首先,我编译并安装了 libwebsockets,就像它在关于构建 lws 的文档注释中所说的那样:

要为编译的低优先级调试消息使用调试信息和 _DEBUG 进行构建,请使用

$ cmake .. -DCMAKE_BUILD_TYPE=DEBUG

来自Libwebsockets 2.1 doc Notes about encoding with lws ( https://libwebsockets.org/lws-api-doc-master/html/md_README.coding.html ):

调试日志

同样使用 lws_set_log_level api,您可以提供自定义回调来实际发出日志字符串。默认情况下, this 指向一个发送到 stderr 的内部 emit 函数。将其设置为 NULL 会使其保持原样。

帮助函数 lwsl_emit_syslog() 从库中导出以简化日志记录到 syslog。您仍然需要在用户代码中使用 setlogmask、openlog 和 closelog。

日志记录 API 可用于用户代码。

lwsl_err(...) lwsl_warn(...) lwsl_notice(...) lwsl_info(...) lwsl_debug(...) notice 和 info 的区别在于默认情况下会记录notice,而默认情况下会忽略info .

如果您没有使用定义的 _DEBUG 构建,即没有这个

$ cmake .. -DCMAKE_BUILD_TYPE=DEBUG 然后日志级别低于通知实际上并没有被编译。

就像在这个(官方)示例中一样,我把lws_set_log_level(10, NULL);我的 websocket 主要功能放在了开头。

CMakeLists.txt:

然后我运行 cmake :

一切正常,我的 websocket 客户端似乎还可以。

但我没有调试日志......我错过了什么?

0 投票
1 回答
1292 浏览

nginx - 如何在 libwebsockets 客户端和 Nginx 等 websocket 服务器之间进行通信?

我尝试实现一个 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 客户端似乎完全没用)

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

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

0 投票
1 回答
436 浏览

ruby-on-rails - 使用 Action Cable 将 libwebsockets 客户端连接到 rails 服务器

我有一个在 ruby​​ on rails 5 上运行的 Web 服务器,带有动作电缆,并希望使用 libwebsockets 客户端连接到服务器。我无法让客户端通过操作电缆成功连接到服务器。libwebsockets 客户端永远不会收到成功连接的回调并且总是超时。我的 Rails 服务器在 nginx 上运行,在 Ubuntu 机器上运行,而客户端是在 Visual Studio 2013 中运行的 C++ 控制台应用程序。我启用了 actioncable/thin 兼容性设置,如https://github.com/macournoyer/中所述瘦/问题/298。我也在使用 redis 作为动作电缆。

我已经尝试过记录和调试我能想到的一切。有人可以为我指出正确的方向来让 libwebsockets 客户端连接吗?


更多细节:

我最初将我的 rails 服务器设置为使用 websocket-rails,这与官方 libwebsockets github 存储库中提供的示例客户端一起使用:https ://github.com/warmcat/libwebsockets/tree/master/test-server 。但是,当尝试连接到使用操作电缆运行的服务器时,同一客户端会超时。我通过实现 javascript 客户端操作电缆代码验证了我在我的 Rails 服务器上正确设置了操作电缆,并且我可以成功连接到操作电缆服务器并订阅频道。根据答案https://stackoverflow.com/a/36120630/3298688,我需要 libwebsockets 客户端在连接后立即发送订阅消息,但客户端从不连接,因此我无法发送此消息。

我的 rails 日志显示服务器成功接收到客户端的请求。该日志条目块在同一秒内触发了两次,因此存在未知的重复请求;连接到 websocket-rails 时没有发生这种情况。自从我的自定义记录器消息出现以来,我可以看到服务器接受来自客户端的连接。每次客户端超时并尝试重新连接时都会重复此操作。

我记录了在 libwebsockets 客户端中触发的所有回调原因,但我从未看到LWS_CALLBACK_CLIENT_ESTABLISHED. 所有回调都与轮询有关(lws_callback_reasons enum 29+)。我试图从这些回调中发送消息,但实际上没有发送任何数据,可能是因为客户端尚未触发连接的回调。

当我关闭客户端应用程序时,rails 日志中出现以下消息两次,因此看起来 rails 服务器没有任何问题。

0 投票
1 回答
671 浏览

segmentation-fault - lws_context_destroy 导致分段错误,如何解决?

它显示在我的多线程程序中:我启动了大约 300 个线程来使用 Websocket(libwebsockets) 连接游戏服务器,主循环是:步骤 1 创建 websocket 的新上下文步骤 2 使用 websocket setp 3 破坏上下文使用函数lws_context_destroy(与服务器断开连接),然后在一段时间后(连接成功大约5k次或更多)返回步骤1,我的程序崩溃(100%),堆栈信息如下:

我是 libwebsockets 的新手,不知道如何解决这个问题......有人可以提供任何提示吗?谢谢