Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 294 Pomógł: 4 Dołączył: 19.12.2008 Ostrzeżenie: (0%)
|
Witam. CHciałbym stworzyć w miare wydajny ( zakładam około 5tyś userów dziennie, z czego np. 1/4 będzie używała wiadomości w danym dniu ) i chciałbym zrobić chat dla nich. Jak myślicie, serwer wytrzyma połączenie typu ajax i php, gdzie intervalem lacze sie co kilka sekund, i sprawdzam czy jest nowy id, jeśli tak to pobieram wiadomość nową? Jeśli raczej nie ma szans, to jak z kompatybilnością i obsługą jest z websocket? Słyszałem o nim, że o wiele łatwiej, jeśli chodzi o wydajność, ale serwis ma być też responsywny a więc i mobilne przeglądarki mogą różnie to interpretować. Jest sposób na obejście websocketa ( nie wiem z czym się go je itd, a czas mnie trochę goni... )
|
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 555 Pomógł: 84 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%)
|
Widzę, że wolisz rozwiązanie PHP i odniosłeś sie w swoim poście do linka, który podałem , więc wytłumaczę Ci wszystko wg. działania Ratchet. Server.php to plik, który uruchamiasz na serwerze za pomocą komendy z konsoli serwera - np. przez putty.
Powinien on w nieskończonej pętli czekać na przychodzące wiadomości socketowe i w momencie otrzymia takiej wiadomości odpalać odpowiednią funkcję. Oczekiwanie, wyłączenie timeoutów PHP i całą warstwę odpowiedzialną za demonizację procesu PHP odpowiada moduł React/Loop, którego Ratchet używa, więc tutaj nie musisz się przejmować o tego typu problemami - tj. "wygasaniem" PHP. Wspomniany serwer musi implementować 4 podstawowe funkcje - onStart, onStop, onMessage i onError - pierwsza uruchamiana jest w przypadku utworzenia nowego połączenia, druga w przypadku zamknięcia istniejącego, trzecia w przypadku otrzymania wiadomości i czwarta w przypadku błędu. Najważniejsza jest trzecia . Funkcja ta ma podobne zadanie jak routing HTTP w przypadku frameworków MVC - odbierasz wiadomość $message od użytkownika $conn i następnie ją parsujesz i przkazujesz do odpowiedniego kontrolera w aplikacji. Odpowiedź generujesz za pomocą $conn->send(MessageInterface $response). Dla porównania w MVC routing zrobiłbyś mniej więcej tak:
Odpowiednik tego przy weboscket (ratchet) byłby taki:
Oczywiście możesz tutaj jaki syntax-sugar samemu zrobić by zapis byłby prostszy i np tworzyć nowe routingi za pomocą czeogś w stylu:
To wszystko - łatwo, prosto i przyjemnie. W tym momencie widzisz, że HTTP i WebSocket to osobne wejścia do Twojej aplikacji, ale jestes w stanie połączyć je obie z istniejącą już architekturą. Problemem jaki możesz napotkać to obiekt $Request, który może w tym przypadku nie istnieć wewnąrz aplikacji, która normalnie używa HTTP. Jeśli moduły z których chcesz skorzystać używają aktywnie Request i nie znajdziesz sposobu by zamockować go przy websocket, to możesz rozwiązać ten problem w taki sposób, by serwer.php po otrzymaniu wiadomości socket, wysyłał lokalnie zapytanie HTTP do Twojej aplikacji , czekał na odpowiedź i następnie odsyłał wiadomość przez socket. Postaraj sie jednak użyć tego w ostateczności. W kwestii zarządcy, to problem jest taki - PHP domyślnie jest jednowątkowe - to oznacza, że jakikolwiek Fatal Error lub Unhandled Exception zamknie proces server.php , a co za tym idzie, Twoje webosckety przestaną działać. Rolą zarządcy jest monitorowanie danego procesu - tutaj server.php z poziomu systemu operacyjnego - po to, że jeślli zakończy on działanie, zarządca uruchomi go ponownie. Dzięki temu niebędziesz musiał się bać, że w przypadku wysypania się któregoś modułu Twoja aplikacja przestanie działac. UWAGA: Nie przepisuj kodu PHP, który podałem w tym poście słowo w słowo, gdyż jest to pseudokod pisany z pamięci, by dać Ci ogólne pojęcia jak to ustrukturyzować. Dokładne zapisy weź z manuala Ratchet. Ten post edytował Skie 20.08.2015, 01:39:09 |
|
|
|
bialko0019 live chat i websocket, wydajny chat 10.08.2015, 19:59:04
grzes999 Nie testowałem socketów nigdy na urządzeniach mobi... 10.08.2015, 20:13:46
bialko0019 hmm, tylko websocket dla mnie nie jest jeszcze pro... 10.08.2015, 20:24:13
Skie Napisanie chatu w oparciu o WebSockety to dużo łat... 10.08.2015, 20:54:29
by_ikar Stwórz coś z przykładów, zarówno w php jak i w nod... 11.08.2015, 07:38:25
pyro Wsparcie websocketów przez przeglądarki: http://ca... 11.08.2015, 11:07:10
bialko0019 Witam ponownie. Dzieki za odpowiedzi. mam pytanie.... 18.08.2015, 10:50:34 
grzes999 Cytat(bialko0019 @ 18.08.2015, 11:50... 18.08.2015, 12:23:19
Comandeer Ta klasa nie ma być uruchamiana na serwerze, tylko... 18.08.2015, 11:21:43
bialko0019 czyli plik typu "server.php" jest w tle ... 18.08.2015, 12:06:08
bialko0019 Chciałbym osiągnąć to, że w serwisie jest np. 100 ... 18.08.2015, 12:31:08 
grzes999 Cytat(bialko0019 @ 18.08.2015, 13:31... 18.08.2015, 12:36:51
bialko0019 czyli myślisz, że serwer może nie dać rady przy aj... 18.08.2015, 14:04:41
!*! https://github.com/Flynsarmy/PHPWebSocket-C...ster... 18.08.2015, 14:15:05
bialko0019 acha, ok dziękuję, będę to rozkminiać ;-)
Jako, ż... 19.08.2015, 21:29:11
Comandeer Jak nie możesz tego odpalić w konsoli serwera, to ... 20.08.2015, 00:11:48
grzes999 Mogę ci jeszcze podpowiedzieć, że w przypadku taki... 20.08.2015, 08:13:46 ![]() ![]() |
|
Aktualny czas: 24.12.2025 - 09:51 |