解决方案:
int session = (int)get_env(argv, SESSION_ID);
获取连接
US_VHOST_DATA
(vhost)或US_HANDLER_DATA
(侦听器)或US_SERVER_DATA
(服务器)唯一的标识符,用于数据持久>当前连接
缺失的部分:
- 仅用于连接的持久数据
- 或者当当前连接被客户端(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 消息格式,所以如果有不同的(也许更好?)解决方案,我也愿意课程。
谢谢!
编辑:添加了关于请求/连接的说明