q中的IPC,如何阻塞直到句柄上收到任何消息

ego*_*or7 3 kdb

在 4.0 中,如何阻塞控制流,直到句柄上收到任何消息?

\n

在 3.6 版本中,我可以使用https://code.kx.com/q/basics/ipc/#block-queue-flushr:h[]中描述的技术

\n

r:h[]但从 4.0 开始,即使我从第二个进程发送类似的内容,呼叫也会永远挂起key[.z.W]@\\:".z.i"(对于 3.6,这是第二个进程有点挂起:它开始成为进程 1 的从属进程,只为它提供服务)请求,但在 4.0 中,进程 1 永远挂起,仅响应进程 2)

\n

这是我在2019.04.02 3.6看到的:

\n
                       \xe2\x94\x82q)\\p 15555\nq)h:hopen`::15555      \xe2\x94\x82q)\nq)                     \xe2\x94\x82q).z.W\nq)h[]                  \xe2\x94\x825|\n// blocked             \xe2\x94\x82q)5i".z.i"\n".z.i"                 \xe2\x94\x82// blocked\nq)q)                   \xe2\x94\x82// blocked\n
Run Code Online (Sandbox Code Playgroud)\n

jas*_*aly 8

我认为该链接背后的文档应该是:

阻塞直到在句柄 h 上接收到异步消息

句柄 h 上传入的同步消息将被处理,但不会解锁套接字。套接字将保持阻塞状态,直到它在 h 上收到异步消息

服务器

q)\p 5005                                                                
q)(first key .z.W)".z.i"              
2611i                                 
q)(neg first key .z.W)"myString"      
Run Code Online (Sandbox Code Playgroud)

客户

q)h:hopen 5005
q).z.pg:{-1"sync message received";value x}
q)h[]
sync message received

1+1

//socket still blocking

"myString"
q)q)2
q)q)q)q)
Run Code Online (Sandbox Code Playgroud)

您提到的 3.6 远程阻止行为已在 3.6_2021.03.04 中修复