我正在尝试打开一个到 HL7 服务器的基本连接,在那里我发送请求并获得 ACK 响应。这将持续进行。

  • 如果这是连续进行的,我什么时候关闭套接字?在这种情况下,我是否正确实现了这一点?
  • 如果关闭套接字,如何再次打开它? ConnectionHub 的 javadoc 说明如下:

  • attach(java.lang.String host, int port, Parser parser,
           java.lang.Class<? extends LowerLayerProtocol> llpClass)
    



    但是,在现实生活中,如果它已经关闭,它不会打开新的连接。
    Patient patient = appt.getPatient();
    Parser parser = new GenericParser();
    Message hl7msg = parser.parse(wlp.getORMString(appt));
    
    //Connect to listening servers
    ConnectionHub connectionHub = ConnectionHub.getInstance();
    // A connection object represents a socket attached to an HL7 server
    Connection connection = connectionHub.attach(serverIP, serverPort,
                                new PipeParser(), MinLowerLayerProtocol.class);
    if (!connection.isOpen()) {
       System.out.println("CONNNECTION is CLOSED");
       connection = connectionHub.attach(serverIP, serverPort, new PipeParser(),
                                         MinLowerLayerProtocol.class);
      if (!connection.isOpen()) {
        System.out.println("CONNNECTION is still CLOSED");
      }
    }
    Initiator initiator = connection.getInitiator();
    Message response = initiator.sendAndReceive(hl7msg);
    
    String responseString = parser.encode(response);
    System.out.println("Received response:\n" + responseString);
    connection.close();
    

    结果:
    第一遍完美通过,发送请求并接收到 ACK。对此方法的任何后续调用都会在客户端产生 java.net.SocketException: Socket closed "。
    如果我删除 connection.close() 调用,那么它会在一段时间内正常运行,然后套接字将自行关闭。

    最佳答案

    如果您通过 HL7 2.X 进行通信,则套接字上的预期行为是永远不会断开连接——您分配连接并使套接字保持 Activity 状态。换句话说,HL7 应用程序执行 而不是 就像一个网络浏览器,它根据需要连接并在完成时断开连接。相反,两端都可以保持套接字持续连接。如果您断开连接,大多数应用程序都会感到恼火。此外,如果您断开连接的时间过长,大多数集成引擎都会发出警报。

    连接套接字后,您需要使用 HL7 最低层协议(protocol)(MLLP 或 MLP)来传达 HL7 2.X 内容。如果您正在发送数据,您应该在发送下一条消息之前等待 HL7 确认。如果您正在接收数据,您应该生成 HL7 Ack。

    引用:

    MLP - http://www.hl7standards.com/blog/2007/05/02/hl7-mlp-minimum-layer-protocol-defined

    确认 - http://www.corepointhealth.com/resource-center/hl7-resources/hl7-acknowledgement

    关于java - 发送 HL7 消息后何时关闭和重新打开套接字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4304998/

    10-13 05:08