ABA


"בעייה תיכנותית - מולטיטרד JAVA."
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #20510 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 20510
Yariv-H לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 24.3.02
5856 הודעות, 1 פידבק
   16:28   31.01.14   
אל הפורום  
  בעייה תיכנותית - מולטיטרד JAVA.  
 
   טוב אז יש לי בעייה שאני מנסה לחשוב על פתרון יצירתי.

סקירה ראשונית:

יש לי מערכת קליינט סרבר , קליינט שולח בקשות , סרבר מחזיר תשובות.

לסרבר לוקח 1 שניות להחזיר תשובה אלי (בעומס).
לי לא משנה תוך כמה זמן אני מקבל את התשובה , שאני מקבל אותה אני יוצר אובייקט חדש ומעביר אותו הלאה (באיזה שהוא שלב אפשר להניח שאין סינכרון בכלל אבל אחרי 24 שעות הסנכרון חוזר קים downtime במערכת קבוע של 8 שעות ביום).

אין לי אפשרות לשנות את הקוד בצד שרת.

כרגע בצד לקוח אני עובד עם axis ב JAVA.

הבעייה בצד לקוח שהתור שלו מתפוצץ.
כרגע ישנו טרד אחד שעובד על התור , ברגע שיש הודעה הוא שולח אותה ע"י call.invoke ומחכה לתשובה , כרגע המצב הוא שהוא ב blocking.


בצד לקוח מייצרים באיזור ה 50-100 בקשות לשניה.


הפתרון שביצעתי כרגע הוא Thread pool אשר יעבוד בצורה אסינכרונית על התור , אבל השליחה עצמה תשאר סינכרונית.


הפתרון הזה כנראה ידרוש ממני לחתזק בערך 100 טרדים בפול אשר יטפלו לי בבקשות.

חשבתי בנוסף אולי על פתרון של ליצור טרד אחד ששולח הודעות לשרת בסגנון בלי לחכות לתשובה (כמו UDP)
וטרד אחד שיקבל את התשובות בשבילו וידפיס אותם .

או אפילו שילוב של השנים (טרד פול בקבלה )

מה אתם אומרים יש פתרון יצירתי / יעיל יותר ?

תודה.

*פורסם במקביל בפורום לימודים



                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  בוא נתחיל בשאלה של, איך אתה שולח את הבקשות לשרת? Nesher  31.01.14 17:37 1
     אוקי.. Yariv-H 31.01.14 18:17 2
         לא מכיר בדיוק את הטכנולוגיות שציינת CaTz 31.01.14 20:06 3
             מעולה , אבדוק את זה. Yariv-H 31.01.14 22:50 6
  מצאתי לך ספריה, תבדוק אם היא עוזרת.. אתה צריך כמו שכתבו מעליי תקשורת בצורה א-סינ איציק2 31.01.14 21:44 4
     תודה לכם. Yariv-H 31.01.14 22:49 5
         בסופו של דבר זה עובד עם ת'רדים, אבל נראה לי שעם כמות מוגבלת וקטנה ממש איציק2 01.02.14 16:13 7
             כמובן , זה בדיוק מה שאני צריך כרגע. Yariv-H 01.02.14 18:36 8
                 תראה בגדול אני לא כ''כ יודע איך הנושא עובד בJAVA (אני מפתח בC#) אבל בגדול איציק2 02.02.14 22:53 9
                     כן , אחרי בדיקה: Yariv-H 03.02.14 19:51 10
                         בכיף, אתה תמיד יכול לנסות לממש לבד... אבל אני בעד שמה שנתנו לך מוכן, פשוט תשתמש איציק2 05.02.14 20:56 11

       
Nesher  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.7.02
2 הודעות, 24 פידבק
   17:37   31.01.14   
אל הפורום  
  1. בוא נתחיל בשאלה של, איך אתה שולח את הבקשות לשרת?  
בתגובה להודעה מספר 0
 
דרך Web Service?
אם כן אתה יכול לעשות קריאה א-סינכרונית לשרת וזה כמו שגר ושכח
ברגע שתקבל תשובה הוא יקרא למתודה שהגדרת
אם לא אז הבהרה של תקשורת השרת תעזור לנו למצוא לך פתרון הולם

לא מכיר איך בג'אווה המנגנון של הת'רדים פועל אבל בגדול, אם אתה מתכנן לפתוח מס' ת'רדים וצריך לנהל את זה כמובן שתצטרך Thread Pool
הייתי מציע לך בכל מקרה לבדוק איפה צוואר הבקבוק שלך.. יכול להיות שזיהית את המקום הלא נכון ואתה מתמקד עליו סתם


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Yariv-H לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 24.3.02
5856 הודעות, 1 פידבק
   18:17   31.01.14   
אל הפורום  
  2. אוקי..  
בתגובה להודעה מספר 1
 
   ערכתי לאחרונה בתאריך 31.01.14 בשעה 18:31 בברכה, Yariv-H
 
זה גם משהו שחשבתי עליו.

כן , יש שימוש ב web service של tomcat אם אני לא טועה .

איך אני מגדיר את הפונקציה שתקבל לי את התשובות ע"י שימוש ב axis2?

והאם כשתובה מגיעה פועל טרד בצורה שקופה שמפעיל את הפונקציה? או שגם שם צריך לנהל טרד פול אשר יאזין לתשובות?

תודה.


**מצאתי את זה http://axis.apache.org/axis2/java/core/docs/dii.html
Request-Response, Non-Blocking that uses two transport connections


העניין הוא פה שיש לי שליחה אסינכרונית וקבלה.

מה שלא כל כך מובן לי , למה אני מחכה לטרד שיקבל את התשובה?

אני צריך משהו ממש דומה לזה רק שאני לא אחכהל call back .

ישנה צורה כלשהיא לבצע את זה? או שאני מפספס פה משהו וה API הזה כן יפעיל לי טרד כאשר יתקבל ה replay?

תודה.



                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
CaTz
חבר מתאריך 2.10.04
14537 הודעות
   20:06   31.01.14   
אל הפורום  
  3. לא מכיר בדיוק את הטכנולוגיות שציינת  
בתגובה להודעה מספר 2
 
   אבל בתיאוריה יש משהו שנקרא non- blocking IO
מה שזה אומר, שה-thread לא מחכה לתשובה אלא חוזר ל-pool, וכשתמקבלת תשובה,
אחד הthreadים הפנויים יבצע את השאר...

יש כמה מחלקות ב-JAVA שכן NIO.
תקרא על זה, אולי זה מה שאתה צריך.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Yariv-H לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 24.3.02
5856 הודעות, 1 פידבק
   22:50   31.01.14   
אל הפורום  
  6. מעולה , אבדוק את זה.  
בתגובה להודעה מספר 3
 
  



                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
איציק2
חבר מתאריך 26.4.08
2436 הודעות
   21:44   31.01.14   
אל הפורום  
  4. מצאתי לך ספריה, תבדוק אם היא עוזרת.. אתה צריך כמו שכתבו מעליי תקשורת בצורה א-סינ  
בתגובה להודעה מספר 0
 
   אסינכרונית.. ככה שתשלח הודעה וכשתתקבל תשובה יקפוץ לך איוונט (ליסינר)...

https://code.google.com/p/extasys/source/browse/trunk/extasys/Extasys+for+Java+Examples/Extasys.Examples.TCPClient/src/Extasys/Examples/TCPClient/TCPClient.java?r=120

נ.ב.
אם מדובר בשרת או קליינט שאמור לשרת המון בקשות עדיף להשתמש בתכנות אסינכרוני ולא בת'רדים..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Yariv-H לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 24.3.02
5856 הודעות, 1 פידבק
   22:49   31.01.14   
אל הפורום  
  5. תודה לכם.  
בתגובה להודעה מספר 4
 
   זה בדיוק מה שאני מתכוון לעשות

תתקן אותי אם אני טועה , אבל בקשה אסינכונית תשלח מין הסתם ע"י טרד , וכמובן התשובה תתקבל ע"י תרד.

אני מעדיף שיהיה API שידאג להכל אבל בתאכלס בפנים שם אני רוצה לדעת האם אני צריך לדאוג להרים את הטרד שמקבל את הבקשה או שהוא מנהל לי אותם.

אבדוק את הנושא.
תודה.



                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
איציק2
חבר מתאריך 26.4.08
2436 הודעות
   16:13   01.02.14   
אל הפורום  
  7. בסופו של דבר זה עובד עם ת'רדים, אבל נראה לי שעם כמות מוגבלת וקטנה ממש  
בתגובה להודעה מספר 5
 
   ביחס לת'רד פר קונקשן..
מה שקורה ברגע שתתקבל תשובה הוא ירים לך איוונט (ליסינר בג'אווה) ובעצם "ישתלט" על הת'רד שהליסינר רשום עליו ויבצע את מה שיש בו..
היופי בתכנות בצורה הזאת שהכל עובד בערך כמו קסם..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Yariv-H לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 24.3.02
5856 הודעות, 1 פידבק
   18:36   01.02.14   
אל הפורום  
  8. כמובן , זה בדיוק מה שאני צריך כרגע.  
בתגובה להודעה מספר 7
 
   יש לך הכוונה איפה אפשר לקרוא כיצד אני מגדיר את הטרד לליסנר?
אני עושה את זה ע"י העברת הפונקציה של "onComplete" ברגע שאני שולח את ה Invoke?

וזאת הסיבה בעצם שנותנים ל טרד לישון ישר אחרי השליחה?

במידה וכן , במידה ואני פותח טרד פול דרכו אני שולח את הבקשות , ולא מבצע את ה sleep אחרי ה invoke הוא יעיר לי טרד מהפול ?

תודה שוב!



                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
איציק2
חבר מתאריך 26.4.08
2436 הודעות
   22:53   02.02.14   
אל הפורום  
  9. תראה בגדול אני לא כ''כ יודע איך הנושא עובד בJAVA (אני מפתח בC#) אבל בגדול  
בתגובה להודעה מספר 8
 
   אתה אמור להעביר את הפונק' כמו שציינת שזה בעצם יהיה הcallback שתחזור אליו ברגע שתקבל תשובה מהשרת...
כלומר ברגע שתגיע תשובה למערכת ההפעלה היא תעלה את זה עד לאפליקציה שלך ושם האפליקציה מקבלת את האיוונט, ובעצם אז מריצה את הcallback שנתת.

אבל הספרייה שנתתי לך לא עושה הכל לבד בעצם?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Yariv-H לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 24.3.02
5856 הודעות, 1 פידבק
   19:51   03.02.14   
אל הפורום  
  10. כן , אחרי בדיקה:  
בתגובה להודעה מספר 9
 
   אז נכון כמו שאמרת , אכן כך זה קורה.

לפעמים הבאות במידה ומישהו צריך , יש Pluging ל אקליפס אשר מגנרט קוד של קליינט ושל שרת לבקשות סינכרוניות ואסינכרוניות דרך ה WSDL של השרת .


הלכתי רחוק מידי בשאלת שלי פה באמת הכול סגור שם ב API , לטעמי ברמה גבוהה מידי , הייתי בטוח שאני הולך להתלכלך יותר .

תודה על העזרה.



                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
איציק2
חבר מתאריך 26.4.08
2436 הודעות
   20:56   05.02.14   
אל הפורום  
  11. בכיף, אתה תמיד יכול לנסות לממש לבד... אבל אני בעד שמה שנתנו לך מוכן, פשוט תשתמש  
בתגובה להודעה מספר 10
 
   בו , אלא אם זה לצורכי לימוד וכאלה..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net