gpt4 book ai didi

c - G-WAN 在处理程序中持久化请求数据

转载 作者:太空宇宙 更新时间:2023-11-04 04:49:57 24 4
gpt4 key购买 nike

解决方案:

int session = (int)get_env(argv, SESSION_ID); 获取连接的唯一标识符US_VHOST_DATA (vhost) or US_HANDLER_DATA (listener) or US_SERVER_DATA (server) for data persistent > 当前连接

缺失的部分:

  • 仅用于连接的持久数据
  • 或当当前连接被客户端(econnreset 等)或服务器(例如到​​达 kalive_tmo)关闭时执行代码的某种方式

一旦为处理程序添加了新的 HDL_BEFORE_CLOSE 状态,这应该就可以解决,这让我回答了这个问题。


原始问题:

是否有可能在 G-WAN 处理程序中存储请求/连接的持久信息(真的不知道“请求”是否适用于此处)?

为了更好地说明我的意思,这是我现在得到的:

  • 客户端(浏览器,javascript)发送 websocket 握手
  • 处理程序开始,进入:
    • HDL_AFTER_ACCEPT - 在这里我为 US_REQUEST_DATA 调用 gc_init,并且没有出现错误
    • HDL_AFTER_READ - 在这里我检查尚未设置的 US_REQUEST_DATA,所以我进行 websocket 握手和 gc_malloc + 设置 US_REQUEST_DATA,增加 KALIVE_TMO,然后返回 2 以发送数据
  • 客户端看到 websocket 连接已建立,所以我(几秒钟后手动触发)发送一条消息
  • 处理程序再次转到 HDL_AFTER_READ,但 US_REQUEST_DATA 未设置

我也尝试过:在 HDL_AFTER_READ 中返回 1 而不是 2 -> 客户端收到 404 并且握手不起作用

目前我只使用 US_REQUEST_DATA 来确定 websocket 连接是否已经建立,下一个传入数据应该是 websocket 消息格式,所以如果有不同的(也许更好?)解决方案,我愿意接受当然也是如此。

谢谢!

编辑:添加了关于请求/连接的说明

最佳答案

我不确定为什么 US_REQUEST_DATA 似乎没有保留您分配的内存块。

你能试试persistence.c吗?示例以查看它是否按预期工作?

除了 G-WAN 持久指针,您还可以使用 Linux 共享内存 API 等操作系统服务。

但是一旦您复制并粘贴上面的示例,G-WAN API 应该可以正常工作。

其他值有不同的范围:

  • US_VHOST_DATA(范围:虚拟主机)
  • US_HANDLER_DATA(作用域:监听器)
  • US_SERVER_DATA(范围:服务器)

使用下面的 session ID,它对每个连接都是唯一的:

int session = (int)get_env(argv, SESSION_ID); 

关于c - G-WAN 在处理程序中持久化请求数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16550466/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com