adbacz
13.08.2014, 13:41:51
Czy posiadając tylko i wyłącznie adres IP komputera klienckiego, jestem w stanie wysłać mu, z poziomu PHP wysłać żądanie do tego komputera?
Czy może jest jakiś inny sposób (bibioteka), która da mi taką możliwość?
Oczywiście zakładając, że wiem, z jakim komputerem chcę sie połączyć.
Jakiego typu żądanie? bezpośrednie Tcp? czy może websocket?
Crozin
13.08.2014, 13:46:14
@ohm: WebSocket działa na TCP.
@adbacz: Oczywiście, że jesteś wstanie wysłać dowolne dane na dowolny adres. Tylko podaj jakieś konkretne pytanie/zagadnienie...
fate
13.08.2014, 13:47:11
Jeżeli dobrze Cie zrozumiałem to nie, kod php musi byc przemielony przez serwer php
adbacz
13.08.2014, 13:48:44
Ktoś coś zrobił, i potrzebuję poinformować o tym zdarzeniu dany komputer. Nie mam zielonego pojęcia co do tego użyć, prosiłbym tylko o jakieś wskazówki, co można użyć i w jakim stopniu a dalej sobie doczytam.
fate
13.08.2014, 16:45:53
zaciekawil mnie ten problem do zwyklego komunikatu jest NET SEND ale dziala na xp a ja roumiem ez ty najchetniej bys wyslal mu trojana przez php
jestes pewny ze winowajca nie ma zmiennego IP

Znalazlem tez kilka sposobow na wyslanie danych ale w innych jezykach niz php, ale nie "żądania"
adbacz
14.08.2014, 07:15:51
Spokojnie, ten "komputer" to jest mój komputer i nie jest żadnym winowajcą

System to XP na tym komputerze. Chodzi o to, żebym poinformował ten komputer z poziomu serwera, bez względu na to, czy ja wyślę mu te dane, które chce by dostał, czy wyśle my tylko "coś" a program na komputerze pobierze sobie sam te dane z serwera. Chodzi mi tylko o jakiekolwiek poinformowanie komputera klienckiego o tym, że coś się stało, resztę sobie jakoś ogarnę.
Crozin
14.08.2014, 07:22:03
Czy to ma działać na poziomie przeglądarki (HTTP) czy na poziomie systemów operacyjnych?
adbacz
14.08.2014, 08:07:02
@crozin - Ale "to" czyli co?
Jesli to coś, co ma informować komputer, to na poziomie serwera (PHP). Ktoś coś będzie robił na stronie internetowej, i jeśli ten ktoś zrobi określoną czynność to z poziomu PHP muszę wysłać do komputera info, że to coś zostało zrobione. Czy to będzie zwykłe "Hey! Sprawdź, bo ktoś coś zrobił!", czy "Masz tutaj dane, kto i co zrobił..." to jest to bez różnicy. Muszę tylko wysłać lub połączyć się z komputerem z PHP na serwerze.
Crozin
14.08.2014, 08:12:44
Nie pytam o treść wiadomości tylko o sposób jej przesłania. Czy ona ma trafić do przeglądarki innej osoby (na innym komputerze) czy do jakiejś innej aplikacji (dedykowanej) na tymże kompuetrze?
adbacz
14.08.2014, 08:37:24
Aha, nie zrozumiałem co ma na myśli. Ma trafić do dedykowanego programu na tym komputerze.
Crozin
14.08.2014, 08:52:52
adbacz
14.08.2014, 09:20:13
Dzięki za linki, poczytam i spróbuje coś zdziałać.
[cite]...chociaż poszukałbym jakieś wysokopoziomowej biblioteki do połączeń[/cite]
Hmm... jak mam zapytać o to Google... ;/
misiek172
14.08.2014, 11:08:25
jeżeli wiesz jaki komputer ma zostać poinformowany to zamiast jemu wysyłać powiadomienia to ustaw, żeby on sprawdzał co jakiś czas czy nie ma dla niego powiadomienia na serwerze
w drugą stronę to i tak to samo, bo komputer musi zostać przygotowany na odebranie tego komunikatu, więc co za różnica czy przygotujemy serwer czy komputer?
Crozin
14.08.2014, 11:47:52
@misiek172: Różnica jest taka, że klient nie musi wtedy bezsensownie "katować" serwera zapytaniami o nowe rzeczy i w dodatku powiadomienie pojawia się natychmiast.
adbacz
14.08.2014, 12:42:23
@misiek172 - Stąd też to zapytanie właśnie. Na początku tak właśnie chciałem zrobić, by komputer odpytywał serwer, lecz stwierdziłem, że to zabije w końcu serwer i zaczałem mysleć nad tym, by to komputer był w tym momencie informowany.
Crozin
14.08.2014, 16:27:20
@adbacz: A tak z czystej ciekawości... mógłbyś podać nieco więcej informacji n/t tego co dokładnie ma być przesyłane? Tj. jaki rodzaj informacji, w jakim kontekście? Mam wrażenie, że chcesz źle podejść do rozwiązania jakiegoś problemu.
adbacz
15.08.2014, 10:01:33
Chcę napisać aplikację czatu. Z poziomu strony WWW użytkownik łączy się z serwerem i wysyła tam informację (treść wiadomości), a później serwer albo wysyła tą informację (tekst, np JSON) do komputera klienckiego, w tym wypadku mojego, na którym jest zainstalowana aplikacja do odbierania i wysyłania wiadomości na serwer.
No i teraz, zamiast zabijać serwer z poziomu aplikacji na komputerze, chciałem poinformować tą aplikację, że wiadomość przyszła, i albo ją przesłać od razu, albo przesłać info, a aplikacja wykona zapytanie i pobierze tą wiadomość sama.
Crozin
15.08.2014, 10:24:36
Czyli klasyczny czat?
1. Każdy z klientów łączy się do serwera stałym połączeniem, czyli w przypadku przeglądarek WebSocket, a w przypadku normalnych programów zwykłe połączenie (socket). Po otrzymaniu wiadomości od jednego z klientów serwer rozsyła ją do wszystkich klientów.
2. PHP słabo się do tego nada ze względu na sposób jego pracy (żądanie - odpowiedź, brak dostępu do innych klientów) - proponowałbym tutaj rozważenie Javy bądź C#, które działają jako serwery aplikacji (zawsze masz dostęp do wszystkich klientów swojej aplikacji).
by_ikar
15.08.2014, 11:08:30
node.js i sockets.io. Jak masz jakieś podstawy z javascriptu, to łatwiej się w tym odnajdziesz, a przykładów już gotowych czatów jest na pęczki. Nawet jest wersja na windowsa (sprawdź WT-NMP jest nawet w wersji portable z ngixem, mysqlem, composerem etc).
adbacz
15.08.2014, 11:13:31
Problem jest tego typu, że na chwilę obecną nie mam dostępu do serwera, na którym mógłbym używać innego języka niż PHP, chyba, że w CGI, ale to w tedy zostaje mi Python i Perl a żadnego nie znam (i nie wiem, czy na CGI można zrobić tak jak sugerujesz z innym językiem).
Problem jest tego typu:
1. Klientów może być wielu. Klientów będę dodawał ja z poziomu serwera. Każdy klient może mieć jedną domenę.
2. Klienci łączą się z serwerem za pomocą WebSocket (lub jeśli nie ma, wysyłają żądania do serwera zwykłe po odpowiedzi i wysyłają treść wiadomości.
3. Aplikacja na komputerze pobiera dane z serwera, jeśli ten przekaże jej informację, że są jakieś nowe wiadomości.
4. Aplikacja loguje się (tworzy sesję) dla danego użytkownika, który zostanie przypisany do aplikacji w ustawieniach tak, by można było używać czasu jako osobne osoby na kilku komputerach.
Wszystko wiem jak zrobić, z tym nie mam problemu, problem zaczynam mieć gdy chcę poinformować aplikację (nie ważne którą), że są jakieś nowe wiadomości. I tak jak mówię, mam dostęp do serwera tylko z PHP oraz CGI w formie Python oraz Perl.
Crozin
15.08.2014, 12:19:46
CGI działa dokładnie w takim sam sposób jak mod_php - żądanie -> odpowiedź, wszystko w odizolowanym środowisku. Jeżeli nie masz możliwości zmiany PHP będziesz musiał się trochę "namęczyć".
1. Po otrzymaniu od jednego z klientów jakiejś wiadomości musisz połączyć się z wszystkimi innymi (fsockopen, sockets albo nawet curl jeżeli jest to połączenie do innego serwera HTTP) klientami i wysłać im wiadomość.
2. Powyższy punkt może zająć naprawdę sporo czasu dlatego od razu możesz pomyśleć nad przeniesieniem tego zadania w tło. Zamiast wysyłać wiadomość dodawałbyś ją do jakiejś bazy danych. Na serwerze w tle musiałby działać jakiś skrypt (daemon), który łączyłby się z bazą danych i cyklicznie (1, 2, 10, 30, 60 razy na minutę) sprawdzał czy są jakieś nowe dane. Jeżeli są wysyłałby je do wszystkich klientów.
3. W taki sposób nie wyślesz niczego do klientów, którzy są podłączeni przez WebSocket (tylko klient może zainicjować takie połączenie). Tak więc kod po stronie serwera związany z obsługą WS musiałby robić dokładnie to co jest opisane w pkt. 2.
W skrócie: W PHP jest to bardzo niewygodne zadanie.
by_ikar
15.08.2014, 18:51:05
To może spróbuj tego:
http://reactphp.org/ gdzieś tam widziałem jakieś prelekcje z tego, ale jak to wygląda w praktyce ciężko mi powiedzieć, bo jak zacząłem się bardziej tematem interesować to node wydał mi się bardziej właściwy do tego celu.
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.