- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我将 warmcat 的 libwebsocket C 库用于小型 websocket 服务器。我已经启动并运行了这些示例,并且可以发送数据以响应从 websocket 接收的数据(例如回显发送的反向字节)。但是,我一直无法弄清楚如何在没有进入 libwebsocket 回调函数的情况下从服务器异步发送数据。我需要将 wsi 指针传递给 libwebsocket_write() 但不知道如何获取指针,除非在回调中。
我读到 libwebsocket 不是线程安全的,我自己的经验似乎证实了这一点。
在 libwebsockets.c:line2483 中,我读到“协议(protocol)回调函数被 [...] 定期调用以允许异步传输。”这正是我想要的,但我没有在我自己的代码中观察到这种情况,也没有找到任何方法来“打开它”。
关于如何异步写入我正在服务的 websocket 的建议?
libwebsocket 代码:http://git.warmcat.com/cgi-bin/cgit/libwebsockets/
使用示例:http://martinsikora.com/libwebsockets-simple-websocket-server
最佳答案
我还没有找到一种 super 干净的方法来做到这一点。我的建议是在服务器可以写入客户端的事件上注册一个回调,然后检查是否有异步工作要发送到那里。 LWS_CALLBACK_SERVER_WRITEABLE
事件就是这样,如果您从回调中调用 libwebsocket_callback_on_writable(context, wsi);
,它将被定期调用。
所以,像这样:
static int callback_myprotocol(struct libwebsocket_context *context,
struct libwebsocket *wsi,
enum libwebsocket_callback_reasons reason,
void *user, void *in, size_t len)
{
SendState *ss = (SendState*)user;
switch (reason) {
case LWS_CALLBACK_ESTABLISHED:
printf("connection established\n");
// get the ball rolling
libwebsocket_callback_on_writable(context, wsi);
break;
case LWS_CALLBACK_SERVER_WRITEABLE: {
if (!work_to_be_done) {
// schedule ourselves to run next tick anyway
libwebsocket_callback_on_writable(context, wsi);
return 0;
}
// send our asynchronous message
libwebsocket_write(wsi, buf, size, flag);
// and schedule ourselves again
libwebsocket_callback_on_writable(context, wsi);
break;
}
default:
break;
}
return 0;
}
我从 test-fraggle.c
示例改编而来;以上是该示例以较小的 block 发送消息的大致操作。
关于c - 如何通过 libwebsocket 发送异步数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14261076/
我正在使用libwebsockets-2.1.0具有通用 session 和lwsws选项启用。 在 LWS_CALLBACK_SERVER_WRITEABLE 情况下,我有一些代码可以打开文件,并将
供您引用(因为我在下面提到了库函数),可以在此处找到 libwebsockets 文档:https://github.com/warmcat/libwebsockets/blob/master/lib
我正在让 libwebsocket 客户端发送二进制数据。我已将我的二进制数据保存到缓冲区中 [即buf] 并写入套接字。 n = libwebsocket_write(wsi, &bu
当我尝试从客户端向服务器发送数据时,它显示“lwsts[9972]:从skt读取时出错”。我在互联网上搜索过,没有明确的表达。我按照 LibWebSockets 包中的 test_server.c 示
我目前正在构建一个 WebSocket 服务器,我遇到了以下代码来处理碎片消息(来自 libwebsockets ): case LWS_CALLBACK_RECEIVE: { Client
我正在 Linux 上使用 libwebsocket lib 开发一个简单的 websocket 服务器。 我需要为每个客户端连接的已建立事件发送一个初始化数据包。 如果我使用 memcpy( p,
我正在使用 libwebsockets而且我无法编译自己实现的演示代码。 我创建了上下文: struct libwebsocket_context *context; ... context = li
我正在使用 libwebsockets 2.0,但在尝试使用它作为客户端连接到服务器时遇到了一些问题。 根据 libwebsockets 日志,这是当我相当简单的客户端尝试连接到 echo.webso
我试图找到一个示例来解释如何使用 libwebsocket 实现客户端,但我没有得到任何令人信服的代码。有什么链接可以引用吗? 最佳答案 更正了 Ren-Wei Luo 的代码示例以使用 libweb
我正在尝试运行与 LWS 库一起安装的“libwebsockets-test-server”,但它无法运行,因为“lwsts[31616]: libuv 支持未编译”。 我已经检查过是否安装了 lib
我正在尝试为 X-Plane 编写一个小插件,使用 libwebsocket 创建一个简单的 websocket 服务器。我可以从 Google Chrome 连接到 websocket,但是,当我向
我想创建一个 Web 应用程序,只要 C++ 后端有新内容,一组用户就可以异步接收一些数据。因此,理想情况下,当新用户到来时,他将被添加到订阅者列表中,并且每当 C++ 后端有该组的新数据时,它就会将
这是 libwebsocket_client_connect() 的签名。 struct libwebsocket * libwebsocket_client_connect (struct libw
我正在查看 C websocket 库 libwebsockets 客户端示例。 但是我不明白示例的目的是什么。 Here是这个例子,这个例子有两个连接(在代码 wsi_dumb 和 wsi_mirr
如何在 libwebsockets 回调中设置用户自定义指针? 我在 lws_protocol 中添加了一个指针变量。 调用回调函数时,用户指针始终为NULL。 我使用 libwebsockets v
我正在尝试实现一个 websocket 客户端(使用 C 中的 libwebsockets)。我正在使用 cmake 来控制软件编译过程。 我的问题很简单:如何使用 Libwebsockets 启用调
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 6 年前。
我正在尝试使用 libwebsockets 创建一个 C++ websocket 客户端,但由于超时,我无法建立连接。我已经剥离了测试的内容,这是我用来建立连接的内容: 协议(protocol) st
我将 warmcat 的 libwebsocket C 库用于小型 websocket 服务器。我已经启动并运行了这些示例,并且可以发送数据以响应从 websocket 接收的数据(例如回显发送的反向
我正在使用 libwebsockets同时运行 websocket 服务器和客户端(实际上在同一个可执行文件中)。有没有办法优雅地关闭连接? 我知道我可以在我的回调函数中返回一个负整数来使连接中止,但
我是一名优秀的程序员,十分优秀!