บทนี้เป็นส่วนแรกของการส่งข้อความ มาพูดคุยเกี่ยวกับรหัสสำหรับการส่งข้อความแบบซิงโครนัส/แบบอะซิงโครนัส ในบทความสองสามข้อถัดไปเราจะปรับปรุงฟังก์ชั่นเล็กน้อยและเพิ่มขีด จำกัด ของความถี่ในการส่งและเวลาการส่งรายวัน
อาจมีหลายวิธีในการส่งข้อความ วิธีการของเราคือการใช้บริการที่ให้บริการโดยผู้ให้บริการ โดยทั่วไปบริการเหล่านี้ปราศจากภาษา ที่นี่เราใช้ Java เพื่อเขียนโปรแกรมตัวอย่าง
1. อินเตอร์เฟสสำหรับการส่งข้อความ <br /> เลือกผู้ให้บริการตามสถานการณ์ของคุณเอง
2. เอกสารการพัฒนา <br /> เราสามารถดูได้จากเอกสารการพัฒนา คุณสามารถใช้คำขอ HTTP โดยตรงหรือคำขอเว็บเซิร์ฟเวอร์เพื่อส่งข้อความ เนื่องจากรหัสในโฟลเดอร์ Java และ JSP ในโฟลเดอร์สาธิตใช้คำขอ HTTP เพื่อส่งข้อความ ดังนั้นฉันจะไม่เข้าไปดูรายละเอียดที่นี่ เราใช้ WebService เพื่อแสดงให้เห็นถึงการส่งข้อความ
3. สร้างรหัสลูกค้า
จากเอกสารอินเทอร์เฟซเรารู้ว่า URL ของ WebSdl WSDL คือ: http://106.ihuyi.cn/webservice/sms.php?wsdl จากนั้นเราสามารถดำเนินการคำสั่งต่อไปนี้เพื่อสร้างรหัสไคลเอ็นต์:
wsimport -keep http://106.ihuyi.cn/webservice/sms.php?wsdl
ในหมู่พวกเขา WSIMPORT เป็นเครื่องมือที่มาพร้อมกับ JDK และตัวเลือก URL -Keep คือ "เก็บไฟล์ที่สร้างขึ้น" คำสั่งนี้จะสร้างแพ็คเกจ sms.cn.ihuyi._106 ในไดเรกทอรีปัจจุบันเช่นเดียวกับคลาสมากมาย ถัดไปเริ่มเขียนรหัสของเราเอง
4. กำหนดอินเทอร์เฟซ
เพื่อความสะดวกที่นี่ก่อนอื่นเรากำหนดอินเทอร์เฟซ:
sms.java
อินเทอร์เฟซสาธารณะ SMS { / ** * ส่ง SMS ไปยังมือถือเนื้อหาคือข้อความ * * @Param หมายเลขโทรศัพท์มือถือ * @param ข้อความ SMS เนื้อหา * @return ส่งคืน -1 สำเร็จมิฉะนั้นส่งคืนค่าอื่น * / int sendMessage (สตริงมือถือสตริงข้อความ);};อินเทอร์เฟซนี้ง่ายมากมีเพียงวิธีเดียว วิธีนี้ใช้เพื่อส่งข้อความ
5. ส่งข้อความพร้อมกัน
ต่อไปก่อนอื่นเราใช้คลาสที่ส่ง SMS แบบซิงโครนัส:
ihuyismsimpl.java
ระดับสาธารณะ ihuyismsimpl ใช้ SMS {บัญชีสตริงส่วนตัว; รหัสผ่านสตริงส่วนตัว โมฆะสาธารณะ setAccount (บัญชีสตริง) {this.account = บัญชี; } โมฆะสาธารณะ setPassword (รหัสผ่านสตริง) {this.password = รหัสผ่าน; } @Override public int sendMessage (สตริงมือถือ, ข้อความสตริง) {cn.ihuyi._106.SMS Factory = ใหม่ cn.ihuyi._106.sms (); SMSSOAP SMSSOAP = Factory.getSmsSOAP (); SubmentResult subment = smssoap.submit (บัญชี, รหัสผ่าน, มือถือ, ข้อความ); int code = subment.getCode (); if (code == 2) {return -1; } system.out.println ("ส่ง SMS ล้มเหลวรหัส:" + รหัส); รหัสส่งคืน; -ในบรรทัด 17 เราได้รับพร็อกซีวัตถุของวัตถุระยะไกล จากนั้นเราสามารถส่ง SMS สอบถามยอดเงินในบัญชีและการดำเนินการอื่น ๆ ผ่านวัตถุพร็อกซีนี้
ในบรรทัดที่ 18 เนื้อหา SMS จะถูกส่งโดยใช้วิธีการส่งของวัตถุพร็อกซี ข้อมูลพารามิเตอร์และค่าส่งคืนความหมายของวิธีการอธิบายอย่างละเอียดในเอกสารอินเตอร์เฟส
ในบรรทัดที่ 19 เราได้รับรหัสสถานะของผลลัพธ์ ตามคำแนะนำในเอกสารรหัสสถานะคือ 2 ระบุว่าการส่งนั้นสำเร็จ เพื่อความเรียบง่ายเรามุ่งเน้นไปที่สถานการณ์ที่การส่งประสบความสำเร็จเท่านั้น ควรสังเกตว่ารหัสสถานะเป็น 2 เพียงระบุว่าการส่งนั้นสำเร็จ ตามเว็บไซต์อย่างเป็นทางการ "การตอบสนองภายใน 3-5 วินาทีการมาถึง 100%" บนเว็บไซต์ทางการเราสามารถอนุมานได้ หากการส่งสำเร็จโดยทั่วไป SMS จะถูกส่งสำเร็จภายใน 3-5 วินาที ตามสถานการณ์เครือข่ายของผู้ใช้ผู้ใช้อาจได้รับ SMS ด้วยความล่าช้าเล็กน้อย
นอกจากนี้ยังง่ายมากที่จะใช้รหัสนี้เพื่อส่งข้อความ คุณสามารถใหม่วัตถุใหม่ตั้งค่าบัญชีและรหัสผ่านและส่งข้อความ
6. ส่งข้อความแบบอะซิงโครนัส
เนื่องจากการส่ง SMS เกี่ยวข้องกับการสื่อสารเครือข่ายวิธี SendMessage อาจมีความล่าช้า เพื่อปรับปรุงประสบการณ์ผู้ใช้เราสามารถใช้วิธีการส่ง SMS แบบอะซิงโครนัส หลักการนั้นง่ายมาก: หากผู้ใช้ร้องขอให้ส่ง SMS แทนที่จะโทรหาวิธีการส่งข้อความของ Ihuyismsimpl โดยตรงเราจะบันทึกคำขอ (ผู้ผลิต) จากนั้นบอกผู้ใช้: SMS ถูกส่งสำเร็จ หลังจากนั้นผู้บริโภคหลายคนออกจากงานและเรียกใช้วิธีการส่ง SendMessage เพื่อส่ง SMS
ที่นี่ฉันใช้เธรดพูลเพื่อทำภารกิจด้านบนให้เสร็จ:
asyncsmsimpl.java
คลาสสาธารณะ AsyncSmsimpl ใช้ SMS {SMS สาธารณะ SENDSMS; ExecutorService Private ExecutorService = Executors.newFixedThreadPool (3); โมฆะสาธารณะ setSendSMS (SMS SENDSMS) {this.SENDSMS = SENDSMS; } @Override public int sendMessage (สตริงมือถือ, ข้อความสตริง) {ลอง {executorService.submit (() -> sendSms.SendMessage (มือถือ, ข้อความ)); } catch (Exception e) {sysemt.out.println ("เกิดข้อผิดพลาดในขณะที่ส่งงาน" + e); กลับ 0; } return -1; } โมฆะสาธารณะทำลาย () {ลอง {ExecutorService.shutdown (); } catch (Exception E) {}}}}รหัสนั้นง่ายมาก คุณสามารถเพิ่มเมธอด SendMessage (Mobile, Message) โดยตรงของอินเทอร์เฟซ SMS ไปยังคิวงานของพูลเธรดเป็นงาน ด้วยวิธีนี้เมื่อมีเธรดฟรี sendsms.sendmessage (มือถือข้อความ) จะถูกดำเนินการเพื่อส่ง SMS ที่นี่เราคิดว่าตราบใดที่มันถูกบันทึกลงในพูลเธรดคุณสามารถส่ง SMS ได้สำเร็จ เพราะการส่งความล้มเหลวนั้นหายากจริง ๆ
ส่งข้อความแบบซิงโครนัส/อะซิงโครนัสเสร็จสมบูรณ์ ในบทความสองสามข้อถัดไปเราจะดูข้อ จำกัด ทั่วไปบางอย่างเช่น: คุณสามารถส่งได้เพียงครั้งเดียวคุณสามารถส่ง 5 ครั้งต่อวัน ฯลฯ
ฉันหวังว่าทุกคนจะชอบบทความนี้