Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Web socket uruchomienie serwera
Forum PHP.pl > Forum > PHP
Stron: 1, 2
Cinamicom
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.
!*!
Cytat
php server.php
Cinamicom
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
1. Jak zabić te procesy? Nie wiem, bo w moim cliencie wyskakuje ze odłączono od serwera.
2. Czyli co proponujesz?
com
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
To jak mam to zrobić? co zamiast ws? czy tam tego crona
com
to może od początku jaki masz cel i co chcesz uzyskać?
Cinamicom
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.
com
!*!

server obsługuje bo tak by mu wysypał errorem że nie zna polecenia socket_connect socket_create wink.gif

a reszta tak jak powiedziałeś wink.gif
Cinamicom
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
/home/xx/domains/xx/public_html/xx/gameserver.php: no process killed

Cron wypluł to na maila.

Ale to raczej nie cronem sciana.gif 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
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.
  1. <?php
  2. exec('killall -9 php testwebsock.php');
  3. ?>
com
!*!

zakładając ze serwer stoi na linuxie wink.gif
!*!
Cytat(com @ 13.10.2013, 17:59:26 ) *
!*!
zakładając ze serwer stoi na linuxie wink.gif

Zwykłe "szaredy" stoją na nim wink.gif choć dziwne że mają WS. Może czasy się zmieniają...
Cinamicom
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.

com
no w sumie fakt, w przeważającej większości to jest linux wink.gif i tez jestem ciekaw jak jest z tym ws tu.. bo jak faktycznie jest to bym po testował biggrin.gif
Cinamicom
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.
com
weź zamknij w końcu tego crona i wróć na serwer i wklep w pliku php to co napisał !*! a potem odpal normalnie wink.gif
Cinamicom
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?
com


i sprawdź czy masz wgl włączone sockets wink.gif
Cinamicom
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
com
a ty dalej z tym cronem, ile razy mamy powtarzać nie rób tego cronem wink.gif
Cinamicom
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
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
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 sad.gif
!*!
IP Twojego serwera.
Cinamicom
Biznes-host.pl ale ip nie znam.

Edit.

Już mam.

Nadal nic z tego.
com
no bo w pliku z klientem tez musisz zmienić na swój serwer wink.gif
Cinamicom
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())
com
no to ja wiem, przecież ale skoro tu nie ustawiłeś to mogłeś tam tez zapomnieć wink.gif 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 wink.gif
Cinamicom
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.
com
pokaż kod swoich plików wink.gif
Cinamicom
Kod wysłałem.
com
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 wink.gif
Cinamicom
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*
com
a websockets.php?
Cinamicom
Chwilkę, już wysyłam.

--Wysłane--

No więc?
com
nie tworzy Ci $user_oth w pliku z klasa GameServer smile.gif wiec potem wyrzuca notice że odwołujesz się do zmiennej która nie jest obiektem, włącz sobie raportowanie błędów wink.gif

#edit nie dostałem wink.gif
Cinamicom
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.
com
to odpal oryginalny plik z githuba czyli testwebsock.php tylko zmień tam ip i port ustaw na jakiś 81 a nie 9000 wink.gif i plik client.js tez ustaw na oryginały i zobacz czy działa smile.gif bo na oryginalnym u mnie trybi na tym twoim nie biggrin.gif
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.