简体   繁体   English

会话线程安全吗?SMPP Logica库

[英]Is Session thread safe?SMPP Logica Library

I want to ask..currently I'm using SMPP Logica Library..for developing SMSC Client...and I'm using session.submit to send message to smsc server,Sending Message almost 50 message/second, and i want to use thread for multiple send ,,because I need every response from server to get Delivery Report...the questions is..is session.submit is thread safe?should i syncronized first the session before sending the message using thread? 我想问..当前我正在使用SMPP Logica库..来开发SMSC客户端...并且我正在使用session.submit将消息发送到smsc服务器,发送消息的速度接近50条消息/秒,我想使用线程进行多次发送,因为我需要服务器的每个响应才能获取传递报告...问题是...会话是否是线程安全的?在使用线程发送消息之前,我应该先同步会话吗? the code I use to send message is 我用来发送消息的代码是

   {
        response = session.submit(sm);
                  SUBMIT_SM_RESP(response,mt);
    ........

    }
         private void SUBMIT_SM_RESP(SubmitSMResp pdu,MTData mtd) {

              log.info("CommandID From PDU "+pdu.getCommandId());
              //SubmitSMResp submitSMResp = new SubmitSMResp();
              if (pdu.getCommandId() == Data.SUBMIT_SM_RESP ){
                //  submitSMResp.setData(pdu.getData());
                  switch (pdu.getCommandStatus())
                  {
                  case 0:
                    log.info("Berhasil kirim MT; SeqNo=" + pdu.getSequenceNumber() + ";" + pdu.debugString());
                    break;
                  case 1031:
                    log.info("Error. Service not found; SeqNo=" + pdu.getSequenceNumber() + ";" +pdu.debugString());
                    break;
                  case 1032:
                    log.info("Error. Invalid TX Id; SeqNo=" + pdu.getSequenceNumber() + ";" +pdu.debugString());
                    break;


 case 1033:
                log.info("Error. Push limit exceeded; SeqNo=" + pdu.getSequenceNumber() + ";" + pdu.debugString());
                break;
              case 4107:
                log.info("Error. Content Whitelisted (Testingmode); SeqNo=" + pdu.getSequenceNumber() + ";" +pdu.debugString());
                break;
              case 1280:
                  log.info("Insuficient Balance(Charging); SeqNo=" + pdu.getSequenceNumber() + ";" +pdu.debugString());
                break;
              }

              log.debug("MT rec status: CommandID=SUBMIT_SM_RESP; SeqNo=" + pdu.getSequenceNumber() + "; CommandSts=" + pdu.getCommandStatus() + pdu.debugString());
              //MTData mt = (MTData)DataInstance.getInstance().getHmSeqMT().get(Integer.valueOf(pdu.getSequenceNumber()));
              MTData mt =mtd;
              String tid = null;
              if (mt == null) {
                  log.info("MT null");
             //   if (DataInstance.getInstance().getHmSeqTrxID().containsKey(Integer.valueOf(pdu.getSequenceNumber()))) {
    //              tid = (String)DataInstance.getInstance().getHmSeqTrxID().get(Integer.valueOf(pdu.getSequenceNumber()));
    //              mt = DataInstance.getInstance().getDbPrs().getMTTrxID(tid);
    //              log.info("MT rec status: CommandID=SUBMIT_SM_RESP; SeqNo=" + pdu.getSequenceNumber() + "; CommandSts=" + pdu.getCommandStatus() + "; trxid=" + tid + "; " + pdu.debugString());
            //      if (mt == null) {
                    log.info("MT rec status: CommandID=SUBMIT_SM_RESP; SeqNo=" + pdu.getSequenceNumber() + "; CommandSts=" + pdu.getCommandStatus() + "; trxid=" + tid + " n/a; " + pdu.debugString());
                    mt = DataInstance.getInstance().getDbPrs().getMTSeqNo(String.valueOf(pdu.getSequenceNumber()));

            //     }
              //  }
              }
              else {
                  tid = mt.getTransid();
                  }
            //  log.info(mt.getClass());
             log.info("Transaction ID >>> "+mt.getTransid());
              if (mt != null) {
                DataInstance.getInstance().getDbPrs().deleteMT(mt, 
                  String.valueOf(pdu.getCommandStatus()), DataInstance.getInstance().getTransX().operator);
                DataInstance.getInstance().getHmSeqMT().remove(Integer.valueOf(pdu.getSequenceNumber()));
              } else {
                log.info("MT Null,,,Can't Send DR");
                log.info("MT n/a: SeqNo=" + pdu.getSequenceNumber() + "; CommandSts=" + pdu.getCommandStatus() + pdu.debugString());
              }
          }
          else
          {
              log.info("Nilai Enquiry Link "+Data.ENQUIRE_LINK_RESP);
          }
        }

Regards 问候

Danz 丹兹

In Synchronous mode it is always thread safe (like you are trying now). 在同步模式下,它始终是线程安全的(就像您现在正在尝试的那样)。 It is a totally different story going Asynchronous mode. 进入异步模式是完全不同的故事。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM