PDA

View Full Version : [socket] creare client socket in pagina web


moteuchi83
30-09-2011, 16:06
Ciao a tutti.
Vi spiego... Ho creato un server in Delphi che sfrutta i socket.
Vorrei creare un "client" accessibile tramite sito web,qindi integrato in una pagina web, che "semplicemente" mi permetta di inviare e ricevere messaggi attraverso i socket appunto verso il server, sapendo ip del server e porta..

Avrei bisogno innanzitutto di sapere se è fattibile come cosa, e poi vorrei un consiglio , su cosa dovrei orientarmi? javascript? php? flash?

Escludo il Silverlight a priori...

Grazie ancora per i consigli!

anonimizzato
01-10-2011, 10:48
Non conosco l'argomento quindi non ti posso aiutare ma dai un'occhiata ai Web Socket.

Ciao.

nico159
01-10-2011, 15:00
Descrivi meglio la situazione che devi affrontare

pabloski
01-10-2011, 15:32
puoi usare ajax e php, oppure puoi usare i websocket di html5

html5 sarebbe il modo di fare futuro, però non tutti i browser supportano in maniera uniforme i vari elementi di html5 e quindi non hai certezza che il client funzionerà ovunque

ajax invece è in giro da anni e ormai il supporto c'è ovunque, visto che si basa su javascript

ovviamente php è a carico del server e quindi non ti dà problemi

imho ti conviene usare ajax + php, poi magari puoi considerare un client in html5 da proporre tra qualche anno

tomminno
01-10-2011, 15:40
Per quello che vuoi fare te le alternative sono:
Html5 Websocket (ma a parte l'ancora scarso supporto) non è un vero Socket, ma si basa su un proprio protocollo di comunicazione basato su HTTP con handshake. Quindi dovresti modificare il tuo server.
Altrimenti i più indicati sono certamente:
Flash
Applet Java
Silverlight (che vuoi escludere a priori)

Ti rimane ancora la parte HTML che serve a caricare il componente aggiuntivo. Quindi avrai comunque bisogno di un webserver e di un dominio.

Tra quelli da te elencati PHP è un linguaggio lato server quindi non ti serve.

tomminno
01-10-2011, 15:46
imho ti conviene usare ajax + php, poi magari puoi considerare un client in html5 da proporre tra qualche anno

Lui però non utilizza l'http per comunicare ma un proprio server (quindi niente php) con protocollo custom (quindi niente ajax e html) infine vuole una comunicazione bidirezionale. L'unica sono i WebSocket ma, a parte lo scarsissimo supporto, lo obbigherebbero a modificare il proprio server per implementarne il protocollo di comunicazione.

pabloski
01-10-2011, 16:52
Lui però non utilizza l'http per comunicare ma un proprio server (quindi niente php) con protocollo custom (quindi niente ajax e html) infine vuole una comunicazione bidirezionale. L'unica sono i WebSocket ma, a parte lo scarsissimo supporto, lo obbigherebbero a modificare il proprio server per implementarne il protocollo di comunicazione.

vero, mi era sfuggita la parte del custom server in delphi

potrebbe però creare un proxy in php che s'interfaccia al suo server....ovviamente non è la soluzione più elegante e rapida

flash può risolvergli il problema ma a patto che lui non sia interessato a device tipo l'iphone ( che non hanno flash )

gli applet java pure sono problematici per svariati motivi tra cui sicurezza e ormai quasi zero diffusione...senza contare che il jre sembra stare antipatico un pò a tutti, da ms ad apple

moteuchi83
01-10-2011, 17:04
Innanzitutto grazie mille per le risposte.

onestamente non mi aspettavo tutta questa difficoltà nell'usare una cosa in teoria "universale" come i socket.

Ho visto che in molti mi hanno consigliato flash... ho scaricato un esempio di client socket in flash, bene , funziona perfettamente "da solo", ma non funziona affatto quando lo inserisco in una pagina html.... devo fare qualcosa in paritcolare per farlo funzionare?

Il server in delphi vorrei evitare proprio di toccalo, poiche comunica con un modem... e vi assicuro che me la sono vista brutta per farli "chiaccherare" tra di loro con i socket....

pabloski
01-10-2011, 17:50
Se vuoi inserire l'applet flash in una pagina html devi fare una cosa tipo questa

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" width="xxx" height="yyy" id="myflash">
<param name="movie" value="pippo.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<embed src="pippo.swf" quality="high" bgcolor="#ffffff" width="xxx" height="yyy" name="myflash" align="" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">
</embed>
</object>

moteuchi83
03-10-2011, 10:38
Se vuoi inserire l'applet flash in una pagina html devi fare una cosa tipo questa

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" width="xxx" height="yyy" id="myflash">
<param name="movie" value="pippo.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<embed src="pippo.swf" quality="high" bgcolor="#ffffff" width="xxx" height="yyy" name="myflash" align="" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">
</embed>
</object>


grazie per il suggerimento, ma non è un normale inserimento di un file swf in html??? c'è qualcosa che mi sfugge?

se è un inserimento "standard" da dreamweaver diciamo, ci ho già provato, ma non funziona...

pabloski
03-10-2011, 11:35
grazie per il suggerimento, ma non è un normale inserimento di un file swf in html??? c'è qualcosa che mi sfugge?

se è un inserimento "standard" da dreamweaver diciamo, ci ho già provato, ma non funziona...

l'unico modo di inserire un file flash in html è quello che ho descritto e dreamweaver fa proprio così

occhio però al path del file....controlla il sorgente html e vedi se punta effettivamente al file swf

moteuchi83
03-10-2011, 11:49
ah ok.

ma il mio problema non è che non riesco ad inserirlo....(ci mancava solo questo)

è che non funzionano i socket..

pabloski
03-10-2011, 12:24
ah ok.

ma il mio problema non è che non riesco ad inserirlo....(ci mancava solo questo)

è che non funzionano i socket..

beh, in quel caso dipende dal programma....non so come l'hai fatto quindi non mi esprimo in merito

moteuchi83
03-10-2011, 16:10
allora, credo di essere stato poco chiaro... mi spiego meglio.

Il problema del flash è che non integrato , ovvero facendo partire direttamente l'swf quando clicco su connect, si connette, crea il socker e il server lo vede.

non appena integro in una pagina html invece no, il server non lo vede, quindi evidentemente il socket del flash ha qualche problema, anche se l'oggetto è identico!


altra cosa , nel mio server delphi ho usato il componente TserverSocket che crea una connessione classica, con socket classicissimi, ho provato a fare un client con php e il server lo vede, però a causa della natura di quest'ultimo ci sono deo problemini che vorrei evitare...

detto questo i WebSocket sono in grado di comunicare con socket normali?

Ajax è proprio da escludere?

pabloski
03-10-2011, 16:49
Il problema è che entrambi usano un protocollo basato su http, ajax usa proprio normali richieste http.

Ovviamente avendo entrambi lo stesso problema, ti conviene ajax visto che sei sicuro che poi funziona su qualsiasi browser. Puoi addirittura sfruttare jquery per questo scopo e semplificarti parecchio la vita.

Il problema è che dev'esserci un server http che, magari tramite uno script php, prende i comandi dal client, li trasforma nel formato del server delphi e fa da proxy tra il client e il server delphi.

tomminno
03-10-2011, 16:50
allora, credo di essere stato poco chiaro... mi spiego meglio.

Il problema del flash è che non integrato , ovvero facendo partire direttamente l'swf quando clicco su connect, si connette, crea il socker e il server lo vede.

non appena integro in una pagina html invece no, il server non lo vede, quindi evidentemente il socket del flash ha qualche problema, anche se l'oggetto è identico!


Non so se ci sono dei motivi di sicurezza che possano impedire questa casistica, ma mi sembra strano.


detto questo i WebSocket sono in grado di comunicare con socket normali?


No.
WebSocket sono dei "socket" basati su http.


Ajax è proprio da escludere?

Si.
Ajax può comunicare solo con l'host da cui proviene la pagina e in ogni caso non avresti la possibilità di far partire la comunicazione dal server.

moteuchi83
04-10-2011, 10:59
Ok fino a quà mi avete "segato" tutte le opzioni:D

quindi cosa mi consigliate?

pabloski
04-10-2011, 11:07
Ok fino a quà mi avete "segato" tutte le opzioni:D

quindi cosa mi consigliate?

se vuoi usare i websocket o ajax devi costruirti pure un proxy php che comunica col server in delphi

altrimenti devi usare flash

moteuchi83
04-10-2011, 11:47
se vuoi usare i websocket o ajax devi costruirti pure un proxy php che comunica col server in delphi

altrimenti devi usare flash

ok ma a questo punto usando SOLO PHP non dovrebbe andare bene comunque?

avrei qualche difficoltà ma ci potrei lavorare su comunque.

cioè invece di fargli fare da proxy, utilizzare direttamente i socket del php?

pabloski
04-10-2011, 12:53
ok ma a questo punto usando SOLO PHP non dovrebbe andare bene comunque?

avrei qualche difficoltà ma ci potrei lavorare su comunque.

cioè invece di fargli fare da proxy, utilizzare direttamente i socket del php?

se il client è interattivo no....immagina una chat in html

come fai ad aggiornare la pagina ogni volta che arriva un messaggio? ricarichi ogni volta la pagina? ovviamente sarebbe assurdo, per cui ti serve javascript per aggiornare solo parte della pagina....questo meccanismo è quello che è noto come ajax

tomminno
04-10-2011, 14:06
ok ma a questo punto usando SOLO PHP non dovrebbe andare bene comunque?


Anche usando PHP il server non può avviare una comunicazione con i client. Sono i client che devono richiedere i dati al server.
Ti ci vuole PHP+WebSocket dove PHP poi comunica con il server delphi.

Un'alternativa è far eseguire alla pagina un polling continuo (ogni 5-10 secondi) per vedere se è arrivato qualche nuovo messaggio.

moteuchi83
04-10-2011, 17:13
Anche usando PHP il server non può avviare una comunicazione con i client. Sono i client che devono richiedere i dati al server.
Ti ci vuole PHP+WebSocket dove PHP poi comunica con il server delphi.

Un'alternativa è far eseguire alla pagina un polling continuo (ogni 5-10 secondi) per vedere se è arrivato qualche nuovo messaggio.

Si la parte in grassetto era scontata...

ma se il php può creare una connessione socket(sapendo porta e ip del server),

a cosa serve il Web socket?

pabloski
04-10-2011, 17:45
Si la parte in grassetto era scontata...

ma se il php può creare una connessione socket(sapendo porta e ip del server),

a cosa serve il Web socket?

occhio a dove gira php e dove girano i websocket

con php tu puoi stabilire una connessione tra il server php e il server delphi e ovviamente possono comunicare allegramente e senza restrizioni

ma il client che gira nel browser? come fa ad avere in tempo reale le informazioni che gli servono? senza i websocket, il server non può contattare il client, l'unica possibilità è che il client faccia il polling chiedendo periodicamente i dati al server ( è quello che si fa con ajax )

usando i websocket crei una connessione punto-punto tra client e server e quindi si può avere un server che invia dati non sollecitati ad un client e viceversa....in pratica la comunicazione è bidirezionale

la stessa cosa la puoi fare con flash ovviamente, visto che flash supporta socket veri e senza strane restrizioni

tomminno
04-10-2011, 18:19
Si la parte in grassetto era scontata...

ma se il php può creare una connessione socket(sapendo porta e ip del server),

a cosa serve il Web socket?

Puoi sostituire i WebSocket con il polling ajax.