למה אצלם זה אף פעם לא עובד? או מדוע IIS+FastCGI לא מה שחשבתם...

ב־16.8.2011, מאת ארתיום; פורסם תחת: תכנה חופשית, פיתוח, תכנה ומחשבים, CppCMS; ‏3 תגובות

זה כבר לא בפעם הראש שואלים אותי אם ניתן להריץ את CppCMS עם IIS.

לכאורה, IIS תומך ב־FastCGI וזה הממשק העיקרי של CppCMS, אז לא אמורה להיות כאן בעיה.

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

  1. IIS לא מאפשר להגדיר פורט! הוא לא רק לא תומך בשרתי FastCGI חיצוניים הוא מחייב את השרת להשתמש ב-Socket שהועבר דרך StdIn, רק שבחלונות Stdin הוא לא בדיוק file descriptor וצריך לעשות שמיניות באוויר כדי לקבל ממנו את ה-socket שעליו עושים accept.

    ראה: http://forums.iis.net/t/1146857.aspx

  2. אבל, נגיד לא נורא, אז נשתמש ב-socket שקיבלתי מהשרת כמו שזה נעשה בד"כ גם עם שרתים ב-Linux.

    זה עדיין לא יעזור! הוא לא יעביר בקשרות לשרת במקביל, הוא פשוט מניח שכל תהליך FastCGI, הוא Single-Threaded ומיועד לטפל בבקשה אחת בו זמנית, כמו ש-PHP עושה.

    ראה: http://forums.iis.net/t/1155551.aspx

    במילים אחרות גם אם אני אפתור את הבעיה הראשונה (הלא מסובכת) המערכת שלי לא תוכל להנות ממקביליות, משמע אין שיתוף cache, אין תמיכה ב-Comet ועוד.

בקיצור... IIS+FastCGI זה זבל שנכתב במטרה אחת בלבד: להגיד ש־PHP רץ על IIS.

אני הולך לבדוק את ההרחבה isapi_scgi‏, אם כי אני כבר יודע שהיא לא ממש תומכת ב־SCGI בצורה נכונה כי לא מטפלת ב־Status כראוי.

תגובות

ליבוביץ, ב־17.8.2011, 19:31

האם יש חברה שמריצה דברים שהם לא דוטנט עם IIS? (אני לא מכיר, אבל איכשהו קיבלתי את ההרגשה ש-IIS כמו הרבה דברים אחרים של מיקרוסופט, עובד מצויין עם תוכנות אחרות של מיקרוסופט, ולא כ"כ טוב על השאר.

אני חושב ש-ebay עושים משהו כזה, שווה לבדוק איך. ברומא התנהג כרומאי, בחלנות תשתמש בcreateProcess ולא ב-fork וכדו'.

ואגב, אי אפשר לעשות fcgi מדומה, שכל מה שהוא עושה זה מעביר את הבקשה לFCGI הראשי? זה גם יכול להיות פרוייט צד יפה. מימוש FCGI עובד ל-IIS. מי שרוצה FCGI באמת יכול להשתמש במעטפת הזו.

ישראל, ב־17.8.2011, 20:59

ליבוביץ, במקום "בחלנות תשתמש בcreateProcess", הייתי אומר: אל תשתמש בחלונות. הבעיה העקירית היא, שגם אם נמצא פתרון כלשהו לבעיה, תצוץ בעיה אחרת...

ברור שישנם מקרים של חסור ברירה, וגם אני הרצתי בעבר מערכות ב-PHP על IIS, כי לא יכולתי ליצור שינויים משמעותיים בחברה, ביום הראשון שהתחלתי לעבוד (עצם המעבר ל-PHP ומספר התקנות והתאמות בשרת היו מספיק שינויים בשביל עובד שהם עדיין לא מכירים), רק מאוחר יותר השלמתי עבור אותה חברה את ההגירה ללינוקס ושימוש בפלטפורמת קוד פתוח בלבד. וגם זה אגב תוך שימור מספר מערכות שרצות על שרת ה-Windows, עם הגירה הדרגתית של מה שאפשר, ושמירה על מספר מערכות שאין ממש אפשרות וכדאיות כלכלית לפתחם מחדש, למרות שהשרת Windows עושה לא מעט צרות בגלל בעיות רבות.

ארתיום, ב־18.8.2011, 10:29

אגב, אי אפשר לעשות fcgi מדומה, שכל מה שהוא עושה זה מעביר את הבקשה לFCGI הראשי? זה גם יכול להיות פרוייט צד יפה. מימוש FCGI עובד ל-IIS. מי שרוצה FCGI באמת יכול להשתמש במעטפת הזו.

האמת זה לא ממש בעיה, הסתכלתי על ISAPI והוא התגלה כלא נורא בכלל (בהשוואה לאיך ש-API של MS נראה בד"כ).

למשה הצלחתי להריץ את היישומים שלי עם isapi_scgi אחרי כמו "מעקפים" שעשיתי בייסום שלי.

בגדול, המימוש של חיבור FastCGI או SCGI בעזרת ISAPI לא אמור להיות מי יודע מה מסובך. האמת אפשר גם להתבסס על isapi_scgi ולשפר אותו טיפה, נראה שבפנים הוא עושה עבודה יפה עם IOCP וכתוב בצורה מאוד יעילה.

בקיצור... זה בדיוק העניין זה לא ממש מסובך לממש מודול ISAPI שיתמוך ב-FastCGI או SCGI כראוי... השאלה למה MS שכל־כך מתגאה בתמיכה ב־FastCGI לא עשתה מאמץ קטן לעשות את זה כראוי.

אל תשתמש בחלונות. הבעיה העקירית היא, שגם אם נמצא פתרון כלשהו לבעיה, תצוץ בעיה אחרת...

האמת, נכון.

הבעיה שלי, זה שאם אני מצהיר ש־CppCMS תומך בחלונות, רצוי שהוא יעבוד גם עם IIS, באמת, כבר לא פעם שאלו אותי לגביו, בגלל זה התעסקתי איתו.

אגב, בסופו של דבר הצלחתי להריץ CppCMS עם IIS (בערך)

http://art-blog.no-ip.info/wikipp/en/page/cppcms_1x_tut_web_server_config#IIS

הוסף תגובה:

 
 כתובת דוא"ל לא תוצג
 

ניתן לכתוב תגובות עם שימוש בתחביר Markdown.

חובה לאפשר JavaScript כדי להגיב.

דפים

נושאים