Cinamicom
13.10.2013, 14:33:48
Witam. Potrzebuje uruchomić mój server.php dla socketa. Słyszałem że mozna to zrobić to przez crona. Mam Direct admina.
Jaką komendą mogę to zrobić?
Dziękuje.
Cinamicom
13.10.2013, 15:25:38
Dobrze, doszedłem do tego jak uruchomić mój plik server, ale cron wysyła mi taki błąd:
Warning: socket_bind(): unable to bind address [98]: Address already in use in [wstawiam linijkę] socket_bind($this->master, $addr, $port)
Wyczytałem w manualu, że muszę dodać takie socket_set_option coś, ale ja już to mam.
Tu mój kawałek client:
var host = "ws://mojastrona.pl/mojserver.php";
socket = new WebSocket(host);
1. pokaż całość, nie możesz zrobić wielu serwerów pod tym samym portem i adresem, możliwe że odpaliłeś ich wiele razy ten sam skrypt i wystąpiła kolizja, zabij te procesy.
2. po co chcesz upychać to w cronie? serwer WS to coś co ma działać w tle, a nie być odpalane co jakiś czas.
Cinamicom
13.10.2013, 16:16:25
1. Jak zabić te procesy? Nie wiem, bo w moim cliencie wyskakuje ze odłączono od serwera.
2. Czyli co proponujesz?
nie wiem gdzie coś takiego słyszałeś, ale cron do tego się nie nadaje, bo tak jak powiedział !*! web socket maja działać w tle, a w cron byś co chwile startował serwerem i inicjalizował klienta, wiec po pierwsze zajechałbyś serwer, a poza tym napotykałbyś się na taki problem jaki masz teraz że uruchamiasz jeden serwer a za chwile uruchamiasz kolejny na tym samym nie zamykając tamtego co jest bez sensu i nie dopuszczalne... No chyba, że chcesz rozłączać serwer co minute czy ile ta m masz ustawione na cronie co jest bez sensu i poco Ci wtedy ws?
Cinamicom
13.10.2013, 16:21:59
To jak mam to zrobić? co zamiast ws? czy tam tego crona
to może od początku jaki masz cel i co chcesz uzyskać?
Cinamicom
13.10.2013, 16:25:33
Cel: Włączony serwer non stop.
Co chce uzyskac? Włączony serwer non stop.
Niech mi tylko ten serwer zadziała. Na localhost było ok.
A na razie mam błędy z tym bindem.
1. Jaki skrypt, czego, czatu?
2. Jaki to serwer, sam pisałeś?
3. Zabijasz proces poleceniem np. pod linux "killall -9 server.php" (najszybciej, najprościej ;)), choć jeśli to dobry skrypt, powinien mieć w sobie metodę do tego.
4. Uruchamiasz serwer WS tak jak Ci pisałem o ile Twój serwer w ogóle to obsługuje.
!*!server obsługuje bo tak by mu wysypał errorem że nie zna polecenia
socket_connect socket_create

a reszta tak jak powiedziałeś
Cinamicom
13.10.2013, 16:39:49
Używam socket_binda.
A poniżej mam socket_listen
Jeśli zamienię bind - >connect to wtedy mam błąd z listenem.
websocket:
https://github.com/ghedipunk/PHP-Websockets.../websockets.php
Tak jak pisałem, zabij proces, ponieważ go dublujesz.
Cinamicom
13.10.2013, 16:48:36
/home/xx/domains/xx/public_html/xx/gameserver.php: no process killed
Cron wypluł to na maila.
Ale to raczej nie cronem

Nie jestem jeszcze wprawiony w tym .
W konsoli musisz to wpisać.
Cytat
killall -9 php testwebsock.php
Czy jak tam Twój serwer się nazywa... Poza tym, ten skrypt nie działa tzn. serwer tak, ale wersja html nie jest przystosowana to przeglądarek.
Cinamicom
13.10.2013, 16:54:04
No właśnie konsoli. Ja mam zwykłego shareda z DA.
i cały skrypt mam ja przystosowany.
Cytat
Ja mam zwykłego shareda z DA.
Jesteś pewien, że w języku polskim nie ma żadnego odpowiednika?
Może tak, zapisz to jako plik i odpal.
<?php
exec('killall -9 php testwebsock.php'); ?>
!*!
zakładając ze serwer stoi na linuxie
Cytat(com @ 13.10.2013, 17:59:26 )

!*!
zakładając ze serwer stoi na linuxie

Zwykłe "szaredy" stoją na nim

choć dziwne że mają WS. Może czasy się zmieniają...
Cinamicom
13.10.2013, 17:02:08
Nie wiem czy mają WS. Ws używałem na localhost.
Zrobiłem jak mówisz, i jeszcze raz odpaliłem crona, z rezultatem takim jak wcześniej, a mianowicie:
Warning: socket_bind(): unable to bind address [98]: Address already in use in /home/xxx/domains/xxx.pl/public_html/xxx/websockets.php on line 20
@
Cinamicom - zacznij myśleć i czytać ze zrozumieniem. Zostaw cron, bo nie jest Ci potrzebny. Wszytko co musisz zrobić, to odpalić z konsoli polecenia, jak nie masz dostępu do konsoli, to z
exec.
To że działało Ci na localhost to normalne, na zwykłym hostgingu nie musi, bo za takie atrakcje się płaci np. kupując VPS/dedyk.
no w sumie fakt, w przeważającej większości to jest linux

i tez jestem ciekaw jak jest z tym ws tu.. bo jak faktycznie jest to bym po testował
Cinamicom
13.10.2013, 17:08:19
Ok, czyli exec /usr/local/bin/php -q gameserver.php ? a przed tym jeszcze raz dać tego killersa.
Tak, choć nie musisz podawać pełnej ścieżki do php, samo "php" starczy.
weź zamknij w końcu tego crona i wróć na serwer i wklep w pliku php to co napisał
!*! a potem odpal normalnie
Cinamicom
13.10.2013, 17:13:45
Dobra. Po zrobieniu kill sprawdzam ifem czy zwraca false - tak
Ale mimo to zrobiłem jeszcze /usr/local/bin/php -q gameserver.php ale dupa bo client(moja nazwa własna!) nie znajduje serwera.
A ustawiłeś takie samo IP dla clienta i takie samo IP dla serwera razem z portem?
i sprawdź czy masz wgl włączone sockets
Cinamicom
13.10.2013, 17:20:48
Dziwne. O 18:09 cron wysłał mi wiadomość bez błędu! z:
Server started
Listening on: 0.0.0.0:9000
Master socket: Resource id #6
Czyli IP coś nie dociera.
Ale to potem. Dziwne dlatego, że wysłał 2 takie wiadomości o 18:09 a był ustawiony na 18:01
a ty dalej z tym cronem, ile razy mamy powtarzać nie rób tego cronem
Cinamicom
13.10.2013, 17:24:19
No ale nie robiłem, wtedy ostatni raz.
--enable-sockets'
Czyli jest włączone.
@Cinamicom - nawet cron Ci to napisał, a Ty nadal swoje... zmień IP.
Cinamicom
13.10.2013, 17:30:01
A no tak. Jakie mam dać? Strzelam że adres mej strony.
Nie bardzo skoro mieszasz JS z PHP. Poza tym wersja z PHP ma mieć tylko IP z portem a nie pełen adres.
Cinamicom
13.10.2013, 17:34:35
Na końcu mam takie coś. $echo = new GameServer("te zera co byly","9000"); Co mam tam dać? Przepraszam za moją głupotę, ale ciężko u mnie z załapaniem
Cinamicom
13.10.2013, 17:43:27
Biznes-host.pl ale ip nie znam.
Edit.
Już mam.
Nadal nic z tego.
no bo w pliku z klientem tez musisz zmienić na swój serwer
Cinamicom
13.10.2013, 17:54:01
Nie. W pliku z clientem (js) tam muszę mieć adres do gameserver.php
ale żeby nie było, spróbowałem i tego.
Efektu pisać nie muszę.
Jak wyświetle te moje exec('/usr/local/bin/php -q gameserver.ph'); to wywala mi mój or die (Failed: socket_bind())
no to ja wiem, przecież ale skoro tu nie ustawiłeś to mogłeś tam tez zapomnieć

a port masz ten sam?
to jaki masz ten komunikat błędu?
# edit zakomentuj te or die bo tak to sie nie dowiemy jaki jest błąd
Cinamicom
13.10.2013, 18:01:07
Port mam ten sam. No błedu nie ma bo wyswietlam te exec, ale jedynie mam or die dla socket_bind($this->master, $addr, $port) or die("Failed: socket_bind()");
Czyli to co było z cronem wcześniej - tak mi się wydaje.
Bez or die nie ma nic.
Edit.
O teraz nawet z or die nic nie wyskakuje, pusto.
pokaż kod swoich plików
Cinamicom
13.10.2013, 18:19:23
Kod wysłałem.
no tak ale chodzi o ten twój a nie gotowiec z neta, bo masz w nim zmiany wiec jak mam powiedzieć co jest nie tak u Ciebie skoro nie mam tego co ty masz
Cinamicom
13.10.2013, 18:21:35
Wysłałem to co ja mam. 2 pliki. No i jeszcze ja mma u siebie index.html ale to tylko <script>client.js</script>
Na Twoje PW*
Cinamicom
13.10.2013, 18:26:00
Chwilkę, już wysyłam.
--Wysłane--
No więc?
nie tworzy Ci $user_oth w pliku z klasa GameServer

wiec potem wyrzuca notice że odwołujesz się do zmiennej która nie jest obiektem, włącz sobie raportowanie błędów

#edit nie dostałem
Cinamicom
13.10.2013, 18:48:19
No to jest ten sam websockets co dawałem x stron do tyłu. Raportowanie jest włączone. I to nie jest to, bo nie łączy sie z serwerem, mam napisane.
to odpal oryginalny plik z githuba czyli testwebsock.php tylko zmień tam ip i port ustaw na jakiś 81 a nie 9000

i plik client.js tez ustaw na oryginały i zobacz czy działa

bo na oryginalnym u mnie trybi na tym twoim nie
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.