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

是否可以在kdb中打开另一个http服务器端口?,kdb,Kdb,我们可以在一个实例中打开更多HTTP服务器端口吗 .z.ph似乎可以在启动或运行时提供的同一端口上处理请求。我需要打开一个额外的端口并有一个单独的处理程序。在同一个q进程中不可能打开两个(或多个)端口。如果尝试使用\p设置端口,它将覆盖旧端口并开始侦听新端口 q)\p 0i q)\p 1234 q)\p 1234i q)\p 4567 q)\p 4567i 我认为您可以设置3个进程(A,B,Main);在不同的端口上设置进程A和B,分别实现处理程序,然后将查询委托给Main进程 要阻止用户直接

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


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

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

q)\p
0i
q)\p 1234
q)\p
1234i
q)\p 4567
q)\p
4567i
我认为您可以设置3个进程(
A
B
Main
);在不同的端口上设置进程
A
B
,分别实现处理程序,然后将查询委托给
Main
进程

要阻止用户直接从web访问
Main
进程,您可以实现
Main
进程的
.z.ph
,如下所示。如果用户试图访问
Main
进程端口,则会向用户显示一个静态页面。这样,用户被迫使用进程
A
B
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;]
q)con:“Blocked

网络访问被阻止

”; q) .z.ph:{[x;y]“HTTP/1.1200 OK\n内容长度:”,(字符串计数x),“\n\n”,x}[con;]
要允许URL本身中存在不同的端点,可以使用
.z.ph
中输入参数的
requestText
部分执行不同的功能:

.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)) ] }; 
根据:
.z.ph
被传递一个参数,即
的两个元素列表(requestText;requestHeaderaDictionary)
requestText
.z.ph
中解析-检测特殊情况,如请求
csv
xls
输出,并将结果返回给调用任务

调用
localhost:4567/metrics
&
localhost:4567/other
将根据条件返回不同的结果

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

您能否详细说明为什么需要这种类型的功能?用例是一个“metrics”专用端口,外部监视器可以从该端口命中(即拉动),而不会影响标准处理程序。当调用metrics端口时,您期望的输出是什么?是表格还是HTML仪表板?如果它是一个简单的表,那么您可能需要调用函数
http://localhost:4567/?metrics[]
无假定json结构化输出。到目前为止,我已经做到了这一点,但我不确定如何允许不同的端点(/metrics、/other1、/other2)
.z.ph:{:“HTTP/1.x200 OK\r\n内容类型:application/json\r\n\r\n”,.j.j.Q.w[]显然我丢失了开箱即用的表格浏览功能。请尝试以下操作:{:“HTTP/1.x200确定\r\n内容类型:application/json\r\n\r\n”,.j.j$[“metrics”~x[0];.Q.w[];reverse.Q.w[]和呼叫&