Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CodeIgniter]json rpc codeigniter
Forum PHP.pl > Forum > PHP > Frameworki
dzajkob
Muszę napisać aplikację klient-serwer w php. Klient musi wywołać zdalnie wybrane metody na serwerze. Chciałbym to tego wykorzystać Jsonrpc lub ewentualnie xmlrpc. Aplikacje chciałem stworzyć w codeigniter gdyż serwer oraz klient będzie stopniowo się rozrastać.

Znalazłem fajny opis rozwiązania przy użycia jsonrpc:
http://ellislab.com/forums/viewthread/98953/

Próbowałem go zaimplementować ale przy postawieniu serwera wywala mi błąd:
{"version":"1.1","error":{"code":0,"name":"Parse error","message":"An error occurred on the server while parsing the JSON text comprising the procedure call."}}

Nie wiem gdzie popełniam błąd. Proszę o pomoc.
Dejmien_85
Cytat(dzajkob @ 14.05.2014, 19:13:10 ) *
Nie wiem gdzie popełniam błąd. Proszę o pomoc.


Popełniłeś błąd wybierając CI.

I teraz też popełniasz błąd zastanawiając się "dlaczego nie CI".

I znów...

No proszę Cię, przestań!

No już, zostaw to CI i pomyśl o czymś nowszym. A może websockety? Hmm? ^^

Czas leci, nowe rzeczy na horyzoncie.

A co do Twojej prośby. No wiesz, nie podałeś prawie żadnych szczegółów, nie ukazałeś nawet jednej linijki kodu, nie napisałeś jak ta aplikacja ma działać - jak trafię na jakąś wróżkę, to dam Ci znać, może co wywróży. Nie podawaj też maila, jak wróżka będzie dobra, to go zgadnie i wyśle Ci fixa na maila. wink.gif
dzajkob
Straszny z ciebie cwaniak. Jak tak cię drażnił ten post to po co odpisywałeś. Widzę że wydaje ci się że pozjadałeś wszystkie rozumy a napisałęś post który zawiera więcej treści od mojego a istotnych informacji zawiera zaledwie na 6 wyrazów. Z kodowaniem również tak działasz.
Dejmien_85
Cytat(dzajkob @ 16.05.2014, 20:49:44 ) *
Straszny z ciebie cwaniak. Jak tak cię drażnił ten post to po co odpisywałeś. Widzę że wydaje ci się że pozjadałeś wszystkie rozumy a napisałęś post który zawiera więcej treści od mojego a istotnych informacji zawiera zaledwie na 6 wyrazów. Z kodowaniem również tak działasz.


Dlaczego się obraziłeś?

Nie chciałem ani Cię obrażać, ani się z Ciebie nabijać. Szanuję ludzi.

Nie odbieraj moich wiadomości źle, po prostu zdarza mi się przecholować z humorem. Jeśli chcesz aby Ci ktoś pomógł, wtedy napisz tutaj troszkę więcej szczegółów. Może i ja wezmę swoją leniwą pupę w kroki i co nieco podpowiem. wink.gif
dzajkob
Powiem ci że początek był nawet zabawny ale całość postu wyglądała jakbyś się ze mnie nabijał.

Opowiem najpierw co chce wykonać.

1. Otóż dwie aplikacje. Klienta i Serwer.
2. Klient wysyła żądanie do Serwera ten ma wywołać odpowiednią metodą i zwrócić wynik.
3. Klient i Serwer ma być stopniowo rozwijany o dodatkowe metody.
4. Nigdy nie robiłem zdalnej komunikacji w PHP, kiedyś robiłem w Javie ale to było z 4 lata temu. Potrzebuje to koniecznie teraz zrobić w PHP.
5. Zadanie ma być wykonane przy użyciu xml lub json. Przeglądając manual trafiłem na xmlrpc i jsonrpc więc próbowałem stworzyć moją pierwszą aplikacje przy xml a potem json. Tak trafiłem na tutoriala implementującego to w CI, wiem że nie jest to najlepszy z możliwych frameworków ale cóż chciałem sprawdzić jak ta implementacja się sprawuje zwłaszcza że nie znalazłem nic ciekawszego.

Jeżeli jest lepsze rozwiązanie to dzięki za wskazówkę. Zacznę studiować wszystko co by mi ułatwiło to zadanie. Jak mówiłem dopiero zaczynam implementować zdalne wywołanie w PHP i jeżeli ktoś ma dobre wskazówki to chętnie skorzystam.

Z góry dziękuje za wszelką pomoc.
Dejmien_85
Cytat(dzajkob @ 17.05.2014, 11:13:30 ) *
Powiem ci że początek był nawet zabawny ale całość postu wyglądała jakbyś się ze mnie nabijał.

Opowiem najpierw co chce wykonać.

1. Otóż dwie aplikacje. Klienta i Serwer.
2. Klient wysyła żądanie do Serwera ten ma wywołać odpowiednią metodą i zwrócić wynik.
3. Klient i Serwer ma być stopniowo rozwijany o dodatkowe metody.
4. Nigdy nie robiłem zdalnej komunikacji w PHP, kiedyś robiłem w Javie ale to było z 4 lata temu. Potrzebuje to koniecznie teraz zrobić w PHP.
5. Zadanie ma być wykonane przy użyciu xml lub json. Przeglądając manual trafiłem na xmlrpc i jsonrpc więc próbowałem stworzyć moją pierwszą aplikacje przy xml a potem json. Tak trafiłem na tutoriala implementującego to w CI, wiem że nie jest to najlepszy z możliwych frameworków ale cóż chciałem sprawdzić jak ta implementacja się sprawuje zwłaszcza że nie znalazłem nic ciekawszego.

Jeżeli jest lepsze rozwiązanie to dzięki za wskazówkę. Zacznę studiować wszystko co by mi ułatwiło to zadanie. Jak mówiłem dopiero zaczynam implementować zdalne wywołanie w PHP i jeżeli ktoś ma dobre wskazówki to chętnie skorzystam.

Z góry dziękuje za wszelką pomoc.


Okay, dzięki za większą dawkę informacji. Proszę Cię jeszcze o jedną rzecz - jeśli możesz, to napisz mi dokładnej jak wygląda "Klient" (apka desktopowa, działa na lokalnym serwerze, czy może na osobnym serwerze?) i przy jakim kodzie wyskakuje tamten błąd.

Super byłoby, gdybyś wkleił troszkę kodu (z "Klienta" i "Serwera"), choć rozumiem, że możesz nie koniecznie chcieć ujawniać swoje dzieło. Jeśli przedstawisz dokładniejszy opis "Klienta", wtedy zobowiążę się przedstawic moje propozycje na wykonanie tego zadania (wraz z przedstawieniem odpowiednich narzędzi).
dzajkob
Już powili kumam. Skorzystałem z tutoriala.
http://www.codeproject.com/Tips/418814/Soc...gramming-in-PHP

Musze teraz tylko przerobić kod tak aby wykonywał odpowiednie metody oraz obsługiwał błędy. Jak skończę to zamieszczę kod aby ktoś podsuną ewentualnie inne pomysły.

Doszłem do tego momentu:

Kod serwera:
  1. <?php
  2.  
  3. $host = '127.0.0.1';
  4. $port = 25003;
  5.  
  6.  
  7.  
  8. if( ! $socket = socket_create(AF_INET, SOCK_STREAM, 0) ){
  9. showError();
  10. } else {
  11. echo 'Informache na temat socket zostaly ustawione<br>';
  12. }
  13.  
  14.  
  15. if( ! socket_bind($socket, $host, $port) ){
  16. showError($socket);
  17. } else {
  18. echo 'Ustawiono socket na odpowiedni port<br>';
  19. }
  20.  
  21.  
  22. if( ! socket_listen($socket, 3) ){
  23. showError();
  24. } else {
  25. echo 'Teraz nasluchuje polaczenia<br>';
  26. }
  27.  
  28. do {
  29. $client = socket_accept($socket);
  30. echo 'Nowe polaczenie z klientem zostalo ustanowione<br>';
  31.  
  32. $message = 'Polaczono z serwerem<br>';
  33. socket_write($client, $message, strlen($message));
  34.  
  35. do {
  36. if ( ! $clientMssg = socket_read($client, 1024) ){
  37. showError();
  38. }
  39.  
  40. $messageForUser = 'Dziekuje za informacje. Pomyślimy o tym<br>';
  41. socket_write($client, $messageForUser, strlen($messageForUser) );
  42.  
  43. if( ! $clientMssg = trim($clientMssg) ){
  44. continue;
  45. }
  46.  
  47. if( $clientMssg == 'close' ){
  48. socket_close($client);
  49. echo '<br><br>------------------------------------<br>' . 'Przerwano polaczenie<br>';
  50. break 2;
  51. }
  52. }while(true);
  53. }while(true);
  54.  
  55. echo 'Socket the endig<br>';
  56. socket_close($socket);
  57.  
  58. function showError( $theSocket = null){
  59. $errorcode = socket_last_error($theSocket);
  60. $errormsg = socket_strerror($errorcode);
  61.  
  62. die("Nie mozna utworzyc polaczenia: [$errorcode] $errormsg");
  63. }
  64.  
  65.  



Kod klienta:

  1. <?php
  2. $host = "127.0.0.1";
  3. $port = 25003;
  4. $message = "Hello Server";
  5. echo "Message To server :".$message;
  6. // create socket
  7. $socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
  8. // connect to server
  9. $result = socket_connect($socket, $host, $port) or die("Could not connect to server\n");
  10. // send string to server
  11. socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");
  12. // get server response
  13. $result = socket_read ($socket, 1024) or die("Could not read server response\n");
  14. echo "Reply From Server :".$result;
  15. // close socket
  16. socket_close($socket);


Wynik działania:
1. Po stronie serwera:
Informache na temat socket zostaly ustawione
Ustawiono socket na odpowiedni port
Teraz nasluchuje polaczenia
Nowe polaczenie z klientem zostalo ustanowione

Warning: socket_read(): in C:\xampp\htdocs\cs\cs\server.php on line 37

Warning: socket_last_error() expects parameter 1 to be resource, null given in C:\xampp\htdocs\cs\cs\server.php on line 60
Nie mozna utworzyc polaczenia: [] Operacja ukończona pomyślnie.


2. Po stronie klienta:

Message To server :Hello ServerReply From Server :Polaczono z serwerem


Ktoś może mi pomóc? Będę wdzięczny.

Poprawiłem trochę kod, a mianowicie doałem trim do socket_read:

  1.  
  2. <?php
  3.  
  4. $host = '127.0.0.1';
  5. $port = 25003;
  6.  
  7.  
  8.  
  9. if( ! $socket = socket_create(AF_INET, SOCK_STREAM, 0) ){
  10. showError();
  11. } else {
  12. echo 'Informache na temat socket zostaly ustawione<br>';
  13. }
  14.  
  15.  
  16. if( ! socket_bind($socket, $host, $port) ){
  17. showError($socket);
  18. } else {
  19. echo 'Ustawiono socket na odpowiedni port<br>';
  20. }
  21.  
  22.  
  23. if( ! socket_listen($socket, 3) ){
  24. showError();
  25. } else {
  26. echo 'Teraz nasluchuje polaczenia<br>';
  27. }
  28.  
  29. do {
  30. $client = socket_accept($socket);
  31. echo 'Nowe polaczenie z klientem zostalo ustanowione<br>';
  32.  
  33. $message = 'Polaczono z serwerem<br>';
  34. socket_write($client, $message, strlen($message));
  35.  
  36. do {
  37. if ( ! $clientMssg = trim(socket_read($client, 1024) )){
  38. showError();
  39. }
  40.  
  41. $messageForUser = 'Dziekuje za informacje. Pomyślimy o tym<br>';
  42. socket_write($client, $messageForUser, strlen($messageForUser) );
  43.  
  44. if( ! $clientMssg = trim($clientMssg) ){
  45. continue;
  46. }
  47.  
  48. if( $clientMssg == 'close' ){
  49. socket_close($client);
  50. echo '<br><br>------------------------------------<br>' . 'Przerwano polaczenie<br>';
  51. break 2;
  52. }
  53. }while(true);
  54. }while(true);
  55.  
  56. echo 'Socket the endig<br>';
  57. socket_close($socket);
  58.  
  59. function showError( $theSocket = null){
  60. $errorcode = socket_last_error($theSocket);
  61. $errormsg = socket_strerror($errorcode);
  62. die("Nie mozna utworzyc polaczenia: [$errorcode] $errormsg");
  63.  
  64. }
  65.  
  66.  
  67.  


Ale i tak mam problem z funkcją showerror a dokładnie z socket_last_error

Warning: socket_last_error() expects parameter 1 to be resource, null given in C:\xampp\htdocs\cs\cs\server.php on line 60
Nie mozna utworzyc polaczenia: [] Operacja ukończona pomyślnie.




No przecież zwraca błąd z null bo jest null smile.gif
Mam teraz następujący kod:

  1. <?php
  2.  
  3. $host = '127.0.0.1';
  4. $port = 25003;
  5.  
  6.  
  7.  
  8. if( ! $socket = socket_create(AF_INET, SOCK_STREAM, 0) ){
  9. showError($socket);
  10. } else {
  11. echo 'Informache na temat socket zostaly ustawione<br>';
  12. }
  13.  
  14.  
  15. if( ! socket_bind($socket, $host, $port) ){
  16. showError($socket);
  17. } else {
  18. echo 'Ustawiono socket na odpowiedni port<br>';
  19. }
  20.  
  21.  
  22. if( ! socket_listen($socket, 3) ){
  23. showError($socket);
  24. } else {
  25. echo 'Teraz nasluchuje polaczenia<br>';
  26. }
  27.  
  28. do {
  29. $client = socket_accept($socket);
  30. echo 'Nowe polaczenie z klientem zostalo ustanowione<br>';
  31.  
  32. $message = 'Polaczono z serwerem<br>';
  33. socket_write($client, $message, strlen($message));
  34.  
  35. do {
  36. if ( ! $clientMssg = trim(socket_read($client, 1024, PHP_NORMAL_READ ) )){
  37. showError($socket);
  38. }
  39.  
  40. $messageForUser = 'Dziekuje za informacje. Pomyślimy o tym<br>';
  41. socket_write($client, $messageForUser, strlen($messageForUser) );
  42.  
  43. if( ! $clientMssg = trim($clientMssg) ){
  44. continue;
  45. }
  46.  
  47. if( $clientMssg == 'close' ){
  48. socket_close($client);
  49. echo '<br><br>------------------------------------<br>' . 'Przerwano polaczenie<br>';
  50. break 2;
  51. }
  52. }while(true);
  53. }while(true);
  54.  
  55. echo 'Socket the endig<br>';
  56. socket_close($socket);
  57.  
  58. function showError( $theSocket = null){
  59. $errorcode = socket_last_error($theSocket);
  60. $errormsg = socket_strerror($errorcode);
  61. die("Nie mozna utworzyc polaczenia: [$errorcode] $errormsg");
  62.  
  63. }
  64.  


ostrzeżenie:

Warning: socket_read(): in C:\xampp\htdocs\cs\cs\server.php on line 37
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.