abap渠道如何获得连接的websocket-client的ip地址

时间:2017-01-10 08:09:29

标签: websocket ip sap abap

我正在研究一个abap push channel服务器到WebSocket客户端连接,我需要客户端的IP地址,以便确定该客户端是否是我要发送消息的客户端。 (在我的场景中可能有多个WebSocket连接)

现在有ssi_websocket_table表和ssi_websocket_table_row行和字段caller_ip,但是,这给了我网络的DNS服务器的IP地址' m连接到。因为WebSocket客户端正在这台机器上运行,所以我期待着本地PC的IP地址。

有没有其他方法可以在活跃的WebSocket连接中获取客户端IP地址?

编辑:

查看所有表条目,当使用不同的服务器配置时,它会显示正确的IP,只要我知道为什么会报告回来。

EDIT2: 正如vwegert所指出的那样,使用IP来区分WebSockets是没有意义的,我认为为每个引入的WebSocket连接使用ID可能会更好。

EDIT3: 要回答这个问题,您可以从ws服务器上下文中获取IP 从WebSocket连接的开始http握手中获取ip头文件。

sap的CL_APC_WS_EXT_ABAP_ONLINE_COMM课程在on_message方法

中执行此操作

i_context是此参数:I_CONTEXT TYPE REF TO IF_APC_WSP_SERVER_CONTEXT

   DATA(lo_context) = i_context.
      DATA(lo_request) = lo_context->get_initial_request( ).
      " initialize G_CONTEXT_ID_FIELD for PCP_SET_CONTEXT_FIELDS
      DATA(lv_id) = lo_request->get_header_field( if_http_header_fields_sap=>remote_addr ).

1 个答案:

答案 0 :(得分:1)

vwegert指出,使用IP来区分WebSocket毫无意义,我认为最好为每个WebSocket连接使用ID。

您可以从WebSocket服务器上下文中获取IP,该上下文显然是从连接的打开HTTP握手中获取IP标头的:

DATA(lo_context) = i_context. " IF_APC_WSP_SERVER_CONTEXT type
DATA(lo_request) = lo_context->get_initial_request( ).

" initialize G_CONTEXT_ID_FIELD for PCP_SET_CONTEXT_FIELDS
DATA(lv_id) = lo_request->get_header_field( if_http_header_fields_sap=>remote_addr ).

该示例取自SAP标准类CL_APC_WS_EXT_ABAP_ONLINE_COMMON_MESSAGE方法。