我正在研究一个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 ).
答案 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_COMM
,ON_MESSAGE
方法。