是否可以在kdb中打开另一个http服务器端口?

时间:2018-08-17 23:48:55

标签: kdb

我们可以在一个实例中打开更多的HTTP服务器端口吗?

.z.ph似乎可以在启动时或运行时在同一端口上处理请求。我需要打开一个附加端口并有一个单独的处理程序。

2 个答案:

答案 0 :(得分:1)

要在URL本身中允许不同的终结点,可以使用requestText中输入参数的.z.ph部分来执行不同的功能:

.z.ph: {  :"HTTP/1.x 200 OK\r\nContent-Type:application/json\r\n\r\n", .j.j $[`metrics~`$x[0] ;.Q.w[] ; (`date`time!(.z.d;.z.t)) ] }; 

根据Kx wiki .z.ph传递了一个参数,即(requestText; requestHeaderAsDictionary)的2个元素列表 requestText.z.ph中进行解析-检测特殊情况,例如对csvxls输出的请求,并将结果返回给调用任务。

调用localhost:4567/metricslocalhost:4567/other现在会根据条件返回不同的结果。

$[`metrics~`$x[0] ;.Q.w[] ; (`date`time!(.z.d;.z.t)) ]

答案 1 :(得分:0)

不可能在同一q进程中打开两个(或多个)端口。如果尝试使用\p设置端口,它将覆盖旧端口并开始监听新端口。

q)\p
0i
q)\p 1234
q)\p
1234i
q)\p 4567
q)\p
4567i

我认为您可以设置3个进程(ABMain);在不同的端口上设置进程AB并分别实现处理程序,然后将查询委托给Main进程。

要阻止用户直接从Web访问Main进程,可以对.z.ph进程中的Main进行如下操作。如果用户尝试访问Main进程端口,它将向用户显示一个静态页面。这样,用户被迫使用进程AB HTTP端口执行查询/请求。

q)con:"<html><body><h1 style=\"font-family:verdana;\">Blocked</h1><p style=\"font-family:courier;\">Web access blocked</p></body></html>";
q).z.ph:{[x;y] "HTTP/1.1 200 OK\nContent-Length: ",(string count x),"\n\n" ,x} [con;]