KX Community

Find answers, ask questions, and connect with our KX Community around the world.

Home Forums kdb+ Async broadcast to websocket handles using internal function -25!

  • Async broadcast to websocket handles using internal function -25!

    Posted by lzl on May 5, 2023 at 12:00 am


    I try to subscribe table in KDB server from a javascript client using websocket and receive message from KDB server.  The websocket connection is good, and I can get the handle (assume the handle is 10). However, when I try to publish data to javascript client using -25!(enlist 10; msg), it throws an error: 10 is not an ipc handle.  I have checked the connection is still alive, and I can publish data to client using neg[10] msg. So is there any constraints on async broadcast(-25!)? Can someone help me with this? Thanks a lot!

    lzl replied 1 month, 1 week ago 2 Members · 2 Replies
  • 2 Replies
  • rocuinneagain

    May 5, 2023 at 12:00 am

    -25! is for use with IPC handles only. Not websocket handles.

    The reason is for IPC handles there is a serialization step and here -25! is efficient in allowing this to only be run once for many handles.

    For websocket handles data is sent directly without any serialization step, -25! would offer no benefit here.

    h  | p f 
    ---| --- 
    612| w t 
    580| q t 
    q)-25!(enlist 612i;"test") 
    '612 is not an ipc handle [0] 
    -25!(enlist 612i;"test") ^ 
    q)-25!(enlist 580i;"test")


    For websockets if there is a large operation like converting a table to JSON you can control this being done once and then sent to multiple websockets:

    neg[webSockethandles]@:.j.j bigTable


    Wrapping the same in a helper:

    wsBroadcast:{[handles;data] neg[(),handles]@:data} wsBroadcast[myWebsocketHandles] .j.j bigTable


  • lzl

    May 8, 2023 at 12:00 am

    Thanks a lot rocuinneagain! I assumed websocket handles were also IPC handles. -38! gives me the answer. Again very appreciate for your detailed reply

Log in to reply.