我们可以在一个实例中打开更多的HTTP服务器端口吗?
.z.ph
似乎可以在启动时或运行时在同一端口上处理请求。我需要打开一个附加端口并有一个单独的处理程序。
答案 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
中进行解析-检测特殊情况,例如对csv
,xls
输出的请求,并将结果返回给调用任务。
调用localhost:4567/metrics
和localhost: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个进程(A
,B
,Main
);在不同的端口上设置进程A
和B
并分别实现处理程序,然后将查询委托给Main
进程。
要阻止用户直接从Web访问Main
进程,可以对.z.ph
进程中的Main
进行如下操作。如果用户尝试访问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;]