פורסם 2008 באוגוסט 1217 שנים שלום,יש לי תוכנה שמאזינה על פורט מסויים וברגע שמישהו שולח לה את המילה "get", היא שולחת בחזרה כל מספר שניות שורה שונה.אני רוצה לכתוב עמוד PHP שמתחבר לאייפי והפורט, שולח "get" ומקבל ברגע שהתוכנה שולחת לו את השורות ומדפיסה אותם בechoכתבתי את הקוד הזה:<?php$host = 'ip';$port = port;$conn = @fsockopen($host, $port, $errno, $errstr, 30);if (!$conn) { die("Error: ".$errstr); }fwrite($conn, "get\n");while (!feof($conn)) { usleep(100); $theNewData .= fgets($conn); echo $theNewData;}fclose($conn);?>אבל זה לא עובד, רק טוען את הדף בלי להפסיק..שאני שולח רק את הפקודה echo fread($conn, 27); בלי הלולאה, אני מקבל את מה שהתוכנה מחזירה, אבל רק מה שהיא מחזירה באותו רגע..למישהו יש פתרון?
פורסם 2008 באוגוסט 1217 שנים אני מניח שאתה מריץ את הקוד הזה מתוך עמוד HTTP ולא מתוך שורת פקודה (פרטים שוליים)...בעיקרון נסה להוסיף flush() וגם ob_flush() אם זה לא מספיק, אחרי ה echo.אם הצד השני לא סוגר את הסוקט, אז feof לא יסתיים אף פעם ולכן טעינת העמוד לא תסתיים אף פעם.
פורסם 2008 באוגוסט 1317 שנים מחבר הוספתי מה שאמרת לי..<?php$host = '212.143.xx.xx';$port = xxxx;$conn = @fsockopen($host, $port, $errno, $errstr, 30);if (!$conn) { die("Error: ".$errstr); }fwrite($conn, "get\n");while (!feof($conn)) { usleep(100); $theNewData = ''; $theNewData .= fgets($conn); echo $theNewData; flush(); ob_flush();}fclose($conn);?>
פורסם 2008 באוגוסט 1317 שנים זה לא מראה כלום באמצע ? בכל מקרה, זה אף פעם לא יפסיק לטעון את העמוד גם ככה, אז למה פשוט לא להחליט לפי איזה תנאי להפסיק את הלולאה האינסופית הזו ולסיים את העמוד ?
פורסם 2008 באוגוסט 1317 שנים מחבר כי התוכנה שולחת שורות כל כמה שניות, אני רוצה שהדף ידפיס אותם..זה כמו instant chat כזה.. לא נגמר
פורסם 2008 באוגוסט 1317 שנים טוב... אז מה אתה רוצה, זה לא נגמר, זה לא יסגר, האם לפחות אחרי ה flush אתה רואה את המידע ?
פורסם 2008 באוגוסט 1317 שנים מחבר לא, זה פשוט טוען בלי להפסיק.איך בנוי למשל צ'אט פשוט בPHP?הוא מתחבר לאייפי אחר ומקבל ממנו מידע שוטף, בלי להפסיק..איך עושים דבר כזה, שיתחבר ויקבל מידע כל פעם שהשרת שולח לו?
פורסם 2008 באוגוסט 1317 שנים בצורה שפויה עושים את זה ע"י הרצת קוד javascript שמשתמש ב xmlhttprequest ברקע. בצורה כזו העמוד נטען מהר ואז יש 2 אופציות, או שאחת לכמה זמן ה javascript יתחבר לשרת וישאל אותו מה חדש מאז הפעם האחרונה (קצת יותר קשה לממש בצורה לוגית אבל מה שבד"כ עושים) או שיש טכנולוגיה בשם comet שבה יש חיבור מתמיד ברקע והשרת יכול לדחוף ללקוח כל מני הודעות:http://en.wikipedia.org/wiki/Ajax_(programming)http://en.wikipedia.org/wiki/Comet_(programming)
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.