Question

Plusieurs visiteurs se connecter à http://site.com/chat.php

Chacun peut écrire et envoyer un message texte à chat.php et il affiche instantanément sur le navigateur de tout le monde ( http: //site.com/chat.php )

Dois-je utiliser une base de données? Je veux dire, est des capacités tampons AJAX ou PHP assez pour un forum de discussion sur les sessions?

Comment les sessions des différents utilisateurs de partager des données de l'autre?

Toute idée ou des idées seront appréciés, merci!

Edit: Merci pour les liens. Mais ce que je veux est le moyen de pousser des données vers un navigateur client. Est constamment rafraîchissant navigateur client (AJAX ou non) la seule façon? De plus, le défi est de savoir comment les différents utilisateurs, par exemple, 2, 1 sur 1, partager des textes de chat? Comment les stocker? Et comment synchroniser-vous les textes entre les 2 clients? Ne pas utiliser de préférence une base de données.

Edit 2: En fait, YShout mentionné par Peter D fait ce travail assez bien. Il ne semble pas garder actualiser le navigateur. Mais je ne comprends pas comment il pousse de nouveaux messages à la fenêtre de l'utilisateur existant.

Était-ce utile?

La solution

il y a (environ) 3 options pour créer une application de chat:

prises

  

utiliser Flash / java et prises pour le frontend et un langage de programmation compatible socket pour le back-end. pour le back-end, je vous recommande de java ou python, parce qu'ils sont multithreading et NIO capable. il est possible de le faire avec PHP (php, mais ne peut pas vraiment faire multithreading efficace et est généralement pas vraiment adapté pour cela). c'est une option si vous avez besoin de haute performance, et probablement pas ce que vous cherchez.

utilisation ajax et tirez

  

dans ce cas, tous les clients sont en permanence (par exemple jamais 2 secondes) si polling quelque chose de nouveau est arrivé. il se sent étrange parce que vous obtenez seulement des réponses à ces intervalles. En outre, il met tout à fait pression sur votre serveur et la bande passante. vous savez qu'une application utilise cette technique parce que le navigateur rafraîchit en permanence. c'est une solution sous-optimale.

utilisation ajax et appuyez sur

  

cela fonctionne avec multipart-réponses et a des scripts à long en cours d'exécution (de) PHP- dans le back-end. pas la meilleure solution, mais la plupart du temps, il vaut mieux que de tirer et il fonctionne et est utilisé dans plusieurs applications de chat bien connus. cette technique est parfois appelée href="http://en.wikipedia.org/wiki/Comet_(programming)".

Mon conseil: si vous avez besoin d'une application de chat pour la production, une distribution existante. applications de chat de programmation ne sont pas que facile.

si vous voulez juste apprendre, commencer par une application simple ajax / pull, puis essayez de programmer un à l'aide ajax et pousser.

et oui, très probablement vous aurez besoin d'une base de données, difficile i avec succès mis en œuvre une solution ajax / pull très simple qui fonctionne avec des fichiers texte pour le plaisir (mais je voudrais certainement pas l'utiliser dans la production!).

il est (à ma connaissance, mais je suis sûr) pas possible de créer une application de chat sans backend côté serveur (avec frontend juste javascript seul)!

UPDATE

si vous voulez savoir comment les données se fait pousser, regardez la source ici: http: //wehrlos.strain.at/httpreq/client.html . async est multipart ce que vous voulez:)

function asSendSyncMulti() {
    var httpReq = new XMLHttpRequest();

    showMessage( 'Sending Sync Multipart ' + (++this.reqCount)  );

    // Sync - wait until data arrives
    httpReq.multipart   = true;     
    httpReq.open( 'GET', 'server.php?multipart=true&c=' + (this.reqCount), false );
    httpReq.onload = showReq;
    httpReq.send( null );
}

function showReq( event ) {
    if ( event.target.readyState == 4 ) {
        showMessage( 'Data arrives: ' + event.target.responseText );
    }
    else {
        alert( 'an error occured: ' + event.target.readyState );
    }

}

showReq est appelée chaque fois données arrivent, pas seulement une fois comme dans ajax-demandes régulières (je ne suis pas en utilisant jquery ou prototype ici, donc le code est un peu obèse - c'est vraiment vieux: )).

voici la partie côté serveur:

<?php

    $c = $_GET[ 'c' ];

    header('Content-type: multipart/x-mixed-replace;boundary="rn9012"');

    sleep( 1 );

    print "--rn9012\n";
    print "Content-type: application/xml\n\n";
    print "\n";
    print "Multipart: First Part of Request " . $c . "\n";
    print "--rn9012\n";
    flush();

    sleep( 3 );

    print "Content-type: application/xml\n\n";
    print "\n";
    print "Multipart: Second Part of Request " . $c . "\n";
    print "--rn9012--\n";

?>

Update2

en ce qui concerne la base de données: si vous avez une architecture partagée rien comme mod_php / cgi dans le back-end, vous definitley besoin certains type de stockage externe comme les bases de données ou textfiles. mais vous pouvez compter sur la mémoire en écrivant votre propre serveur http (possible avec php, mais je ne le recommande pas pour un travail sérieux). ce n'est pas vraiment compliqué, mais probablement un peu hors de la portée de votre question ^^

Update3

i fait une erreur! avons tout mélangé, parce qu'il a été longtemps fait, je l'ai fait quelque chose comme ça. voici les corrections:

  1. réponses multipart ne fonctionnent qu'avec les navigateurs Mozilla et sont donc d'une utilité limitée. COMET ne signifie pas multipart-réponse.

  2. COMET signifie: réponse singlepart traditionnelle, mais tenue (avec une boucle infinie et le sommeil) jusqu'à ce qu'il y a des données disponibles. de sorte que le navigateur a 1 requête / réponse pour chaque action (dans le pire des cas), pas une demande toutes les x secondes, même si rien digne réponse arrive.

Autres conseils

Vous parlez de vouloir que cela fonctionne sans DB, et sans que le client (s) d'interrogation du serveur pour les mises à jour.

En théorie, vous pouvez le faire en stockant le « journal » des chats dans un fichier texte sur le serveur, et changer votre page afin que l'utilisateur effectue une requête GET sur la page chat.php, mais la page PHP ne fait termine l'envoi à l'utilisateur. (Par exemple, la réponse ne se termine jamais)

Vous devrez renvoyer certains « pas op » données pour maintenir la connexion passe quand il n'y a pas de messages, mais en théorie, cela fonctionnerait.

Le problème est, pour accomplir ce qui précède est encore beaucoup de travail. Vous devez faire les messages AJAX au serveur pour soumettre de nouveaux commentaires ... le navigateur des utilisateurs serait en train de tourner le tout le temps (à moins que vous imbriquer le journal de chat dans un iframe - par exemple plus de travail) ... et ce genre de configuration serait tout simplement très difficile à gérer.

Je vous suggère de saisir un script de chat d'ailleurs (par exemple http://tinychat.com/ ) ou si vous voulez rouler votre propre (pour le plaisir / expérience) puis aller de l'avant, mais commencer par une base de données et de construire une page qui va pousser et tirer les messages du serveur.

Enfin, si vous êtes inquiet au sujet de « marteler » le serveur avec des requêtes AJAX ... non. Il suffit de construire le chat, alors si vous constatez des problèmes de performances, revenir à StackOverflow une question sur la façon d'optimiser de sorte que des centaines de demandes ne sont pas inondent le chat quand il n'y a pas d'activité.

Alors que HTTP n'est pas fait pour faciliter la pousser, vous pouvez émuler une connexion poussée en ayant le script PHP ne jamais terminer et être soigneusement regardé le résultat JavaScript.

Essentiellement, vous simuler un lecteur de flux.

Si vous souhaitez les nouveaux utilisateurs de charger une histoire du chat qui se sont produits avant leur entrée dans la salle, un DB ou un autre stockage est nécessaire. À moins que vous essayez de créer un chat apprentissage, il y a trop de là-bas pour utiliser gratuitement déranger.

http://tinychat.com est un autre site simple de chat.

AJAX fonctionne très bien. J'ai créé une page simple pour un de mes sites. Mais je trouve que le chat ne soit pas utilisé aussi souvent que vous le pensez.

Le partage de données est un peu plus compliquée et serait plus facile à réaliser en accueillant un serveur IRC et qui permet aux utilisateurs d'utiliser les clients IRC qui ont la capacité d'échange de données. Bien que rien ne vous empêche d'avoir un téléchargement utilisateur sur le site, puis d'autres télécharger. Personne à personne serait difficile avec l'aide d'une interface Web, car les utilisateurs ne sont pas connectés en aucune façon les uns aux autres.

  

et il affiche instantanément sur le navigateur de tout le monde

Avec php / JS vous ne pouvez pas pousser les données du serveur aux clients. Ainsi, vos clients doivent demander des données à partir du serveur. Et c'est ce que scunliffe a décrit dans son poste.

Vous pouvez le faire entièrement en HTML et Javascript en utilisant un service comme PubNub . Vous auriez pas besoin d'une base de données que vous pouvez utiliser quelque chose comme l'histoire api pour remplir les derniers x messages de chat.

Voici un rapide tutoriel sur la construction d'une application de chat avec PubNub.

Chat en temps réel Apps dans 10 lignes de code

entrer image description ici

Enter Chat and press enter
<div><input id=input placeholder=you-chat-here /></div>

Chat Output
<div id=box></div>

<script src=http://cdn.pubnub.com/pubnub.min.js></script>
<script>(function(){
var box = PUBNUB.$('box'), input = PUBNUB.$('input'), channel = 'chat';
PUBNUB.subscribe({
    channel  : channel,
    callback : function(text) { box.innerHTML = (''+text).replace( /[<>]/g, '' ) + '<br>' + box.innerHTML }
});
PUBNUB.bind( 'keyup', input, function(e) {
    (e.keyCode || e.charCode) === 13 && PUBNUB.publish({
        channel : channel, message : input.value, x : (input.value='')
    })
} )
})()</script>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top