Une webapp de tchat en PureBasic connecté à node.js

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Une webapp de tchat en PureBasic connecté à node.js

Message par falsam »

Préambule.
L'objectif initial ce ce topique était de trouver comment, ou plutôt chez qui, héberger un serveur websocket compatible windows codé avec PureBasic. Après maintes recherches, je n'ai pas trouvé de solution.

Node.js
Compte tenu de cette réalité, j'ai décidé de me tourner vers un serveur node.js et de coder le chat (le client) avec PureBasic et de générer automatiquement le code correspondant en JavaScript.

Pour cela j'ai utilisé PB2Web (PureBasic to Web) car mes essais avec SpiderBasic comme je l'ai signalé plus loin, ce sont soldés par des échecs.

Au owner de ce lieu.
Un petite mot au owner de ce lieu : Je suis conscient que je parle d'un produit concurrent de SpiderBasic et j'avoue que je suis mal à l'aise car je n'aurais pas aimé que quelqu'un se présente chez moi pour parler d'un produit concurrent à un produit que j'aurai développé. Fred si tu le souhaites tu peux supprimer ce topic.

Mise en place d'un system de tchat (chat).
Ce n'est pas forcément un bon exemple pour parler de node.js car on peut développer un chat sans passé par un serveur de ce type, mais c'est le plus simple.

- Le serveur est codé en JavaScript avec Node.js.
  Il est actuellement hébergé par la société Goldoweb qui a bien voulu me faire une petite place dans un de ses serveurs.

- Le client est codé en PureBasic puis généré avec PB2Web pour obtenir une web application.
   Il est actuellement hébergé chez 1and1 sur un serveur mutualisé.

Démonstration.

Image

:arrow: Cliquez sur ce lien pour un live chat : http://purebasic.chat

Et pour finir.
Merci à tous ceux (pas assez nombreux à mon gout) qui se sont connectés sur ce chat et plus spécialement à GallyHC et SPH pour leurs contributions à ce code.


PS : Certains commentaires de ce topic ne seront pas adaptés à mon premier message car j'ai reformulé ma demande initiale.
Dernière modification par falsam le lun. 13/juil./2015 13:05, modifié 19 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Hebergé une application bi-directionnel PureBasic

Message par nico »

Tu parles de la possibilité de stocker en ligne? ou de SpiderBasic?
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Hebergé une application bi-directionnel PureBasic

Message par falsam »

Les fichiers générés par SpiderBasic (Html, JavaScript) je sais faire.

C'est bien des exe (Windows) purebasic gérant des communications bidirectionnelles que je souhaiterais héberger.

Pourquoi pas aussi un exe qui fait office de serveur websocket. L'application de Dadido3 sur le forum anglais est un bon exemple
:arrow: http://www.purebasic.fr/english/viewtop ... 89#p460689
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Hebergé une application bi-directionnel PureBasic

Message par falsam »

Un autre exemple, héberger l'exemple atomic server :)
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Hebergé une application bi-directionnel PureBasic

Message par falsam »

N'ayant pas trouver de réponse concernant l'hébergement d'applications serveur codées avec PureBasic, je vais me tourner vers node.js tout en l'intégrant dans du code SpiderBasic ou PB2Web.

Ne connaissant rien à cette technologie, je lancerais Node sous windows depuis mon pc et les pages générées avec PureBasic et son plugin PB2Web ou bien avec SpiderBasic, seront stockées sur un serveur mutualisé.

Par la suite je souscrirais à une instance node chez un hébergeur.

Si mon cheminement vous intéresse je peux vous en dire quelques mots durant ma phase de test.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: Hebergé une application bi-directionnel PureBasic

Message par Marc56 »

Hello falsam,

Pour héberger une application Windows, tu ne pourras pas bénéficier d'un serveur mutualisé (comme pour les instances MySQL, Apache etc). Il te faudra donc une machine complète ou une instance virtualisée (Comme Vmware).
C'est un VPS (Serveur Privé virtuel ou mieux dédié (= machine entière mais plus chère).
Il y a des offres à quelques euros par mois, mais sous Linux (ou autre Un*x) car pour Windows, tu devras fournir une licence serveur ou la "louer" :o (~12€/mois)

Autre chose à prendre en compte: la maintenance.
Dans le cas de base ils se contenteront sauver tout l'image "disque" et la restaureront en cas de demande.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Hebergé une application bi-directionnel PureBasic

Message par falsam »

C'est pour cela que je me tourne vers une solution node.js.

Je peux continuer à coder une application avec Pure Basic puis la générer en code html + Javascript pour le faire tourner sur un serveur mutualisé dans un premier temps.

Cette application se connectera sur mon serveur node qui tourne actuellement sous windows 7 :)
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Hebergé une application bi-directionnel PureBasic

Message par Kwai chang caine »

Si mon cheminement vous intéresse je peux vous en dire quelques mots durant ma phase de test.
Moi je suis très intéressé, j'avais aussi eu l'dée de coupler mes NAS Synology sur ma boite FREE, pour y déposer mes sites
Et puis comme beaucoup de mes projets...j'ai abandonné en cours, j'ai mis les NAS en place et rien relier :oops:

Mais ton histoire de "MODE", j'suis pas très fashion victime, et sincèrement c'est au dessus de mes moyens, même de comprendre :oops:
En plus avec ma petite tête même si je comprenais (Aaaaah leees noooooouuuuuilllles aaahh !!!) je retiendrais surement pas.
Mais je lirais tes travaux à mon rythme, et encore...
Enfin je t'écris ça, juste pour te dire que tu ne parles pas dans le vide...t'as au moins 2 lecteurs Marc56 qui maitrise :wink: et KCC :oops: qui te les brises :lol:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Hebergé une application bi-directionnel PureBasic

Message par falsam »

Kwai chang caine a écrit :Mais ton histoire de "MODE", j'suis pas très fashion victime, et sincèrement c'est au dessus de mes moyens, même de comprendre
Hello mon Kwai chang caine :)

Je ne parlerais pas de Mode parce que j'aime la différence (je dis n'importe quoi comme d'hab) , mais de Node.

Pour développer un site web on utilise différentes technologies.

Certaines technologies sont interprétés sur le serveur sur lequel est hébergé le site web. C'est le cas du HTML, CSS, Php, MySql, etc ....

D'autres technologies comme JavaScript sont interprétés sur le navigateur de l'utilisateur ce qui n'est pas sans conséquence sur la sécurité des données, mais là n'est pas le débat :)

Node.js phénomène de mode
Tu parles de Mode est tu as raison car Node est devenu un phénomène de Mode.

On voit fleurir des applications dynamiques temps réels (Rien à voir avec Temps-X et les frères bogdanov) comme FaceBook ou Twitter (Les tweets arrive automatiquement sur la page que tu consultes) ou encore des messagerie instantanée dans lesquelles les utilisateurs savent en temps réel qui est connecté.

Ce forum n'utilise pas cette technologie. Tu es obligé de rafraîchir la page pour savoir qui est encore connecté (basées sur les utilisateurs actifs des 5 dernières minutes).

Qu'est ce que Node.js
Node.js offre un environnement événementiel JavaScript côté serveur. C'est un environnement qui fonctionne manière similaire à la bibliothèque Network en PureBasic (CreateNetworkServer(), SendNetworkData(), ReceiveNetworkData(), ...)

Quelques fonctionnalités de Node.js
-http.createServer() pour créer un serveur équivalent en PureBasic à CreateNetworkServer()
-socket.emit() pour envoyer un message ou des informations à un utilisateur.
-socket.broadcast.emit() pour envoyer un message ou des informations à tous les utilisateurs connectés.
-server.listen() le serveur est lancé et attend les ordres sur un port qui sera défini.

Un exemple de serveur JavaScript: server.js

1 - Création du serveur
2 - Création d'un socket de communication.
3 - Initialisation d'une variable global numéro d'invité (NumGuest)

4 - Boucle événementielle
4.0 - Un client se connecte
4.0.1 - On lui attribue un numéro de visiteur et on lui renvoie son adresse ip
4.0.2 - On affiche l'information de connexion sur la console (Le client ne le voit pas)

4.1 - Un client se déconnecte
4.1.1 - On affiche l'information de déconnexion sur la console (Le client ne le voit pas)

5 - Le serveur est en écoute

Code : Tout sélectionner

var http = require('http');
var fs = require('fs');
var ent = require('ent');

// Create server (1)
var server = http.createServer( function(req, res) { } );

// Load socket.io (2)
var io = require('socket.io').listen(server);

// Init guests number (3)
var numguest = 0;

// On Client connected (4.0)
io.sockets.on('connection', function (socket, pseudo) {    	
	
	// New guest (Log socket id and adress ip)
	var clientip = socket.request.connection.remoteAddress
	console.log("Client socket number :"+ socket.id + " connected");
    console.log("Client adress ip     : " + clientip);
	
	// Log and send new guest number and ip to client (4.0.1 & 4.0.2)
	numguest++;
	console.log("New guest number " + numguest);
	socket.emit("setnewguest", "GUEST_"+numguest); 
	socket.emit("userip", clientip);
	
	// On Client disconnect (4.1 & 4.1.1)
	socket.on('disconnect', function () {
        console.log("Client socket number "+ socket.id + " disconnected");
    });
});

//Listen (5)
server.listen(8080);
J'entend déja les futurs commentaires : Mais pourquoi nous parle t'il de JavaScript sur un forum consacré à PureBasic ? Parce que le code suivant en PureBasic va recevoir des informations de ce serveur.

Cotés client le code est en PureBasic (et converti en JavaScript :mrgreen:)
De même qu'il est possible d'insérer du code Assembleur, il est aussi possible d'insérer (Avec Spider Basic par exemple) du code JavaScript.

Ce code ne sert à rien d'autant plus qu'on peut arriver au même objectif sans passer par Node.

1 - Le client se connecte à un serveur
2 - Il reçoit un numéro de visiteur.

Code : Tout sélectionner

Enumeration
  #Mainform  
  #User
  #Userip
EndEnumeration

Global socket, connect, userid.s, userip.s

Declare Start()

OpenLibrary(#PB_Any, "https://cdn.socket.io/socket.io-1.3.4.js", @Start())

Procedure Start()  
  Protected NumGuest, NewMessage.s
  
  ;Form
  OpenWindow(#Mainform, 0, 0, 500, 400, "Node test connection", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  TextGadget(#PB_Any, 20, 25, 150, 22, "Your guest number")
  StringGadget(#User, 175, 20, 150, 22, "", #PB_String_ReadOnly)
  
  TextGadget(#PB_Any, 20, 55, 150, 22, "Your adress ip")
  StringGadget(#Userip, 175, 50, 150, 22, "", #PB_String_ReadOnly)

  ;Client connects 
  !socket = io.connect('81.64.18.69:8080'); 
  
  ;Client receives a guest number
  !socket.on('setnewguest', function(userid) {
    SetGadgetText(#User, userid)
  !})
  
  ;Client receives adress ip
  !socket.on('userip', function(userip) {
    SetGadgetText(#Userip, userip)
  !})
  
EndProcedure
Démo Le serveur node sous windows étant chez moi je ne suis pas certain qu'il tourne correctement en permanence : Surtout si mon pc se met en veille :mrgreen:

:arrow: La démo n'est plus présente. Elle est remplacé par le system de tchat.
Dernière modification par falsam le sam. 09/mai/2015 20:37, modifié 4 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Hebergé une application bi-directionnel PureBasic

Message par falsam »

Cette démo n'étant pas très fun, j'essayerai de coder un truc un peu plus interactif comme un tchat par exemple.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Hebergé une application bi-directionnel PureBasic

Message par Kwai chang caine »

Milles merci FALSAM de te lancer dans une cause perdue 8)

C'est super intéressant ce que tu racontes...remarque tout ce que tu racontes est intéressant, c'est pas truc qui "se coupe" :mrgreen:
Et encore, je protège ton égo, pour ne pas te dire que c'est même passionnant, tu nous ramène toujours de ces truc 8O un vrai filet à crevettes :mrgreen:

Bref, parce que j'aime bien aller directement au but :mrgreen:

Déjà ton site marche, ta machine est pas en veille comme toi :D , j'ai vu une fenêtre que j'ai pu déplacer 8)

Tu m'as appris pas mal de chose sur l'histoire du coté client ou serveur de la force :mrgreen:

Moi je ne connais que le coté tout bête serveur et un peu de javascript coté client :oops:
Le WEB 1.0, HTML 4 et je suis déja fier d'avoir fait tous mes sites avec ces fleurons de la technologie ......des années 20 :mrgreen:

PS: Je viens de comprendre qu'il faut lancer le code "PB" dans SB .... j'ai généré noir d'erreur de la part du compilateur PB ....la dream team est mal barrée :oops:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Hebergé une application bi-directionnel PureBasic

Message par falsam »

Kwai chang caine a écrit :Je viens de comprendre qu'il faut lancer le code "PB" dans SB
Non c'est bien avec l'éditeur de PureBasic mais en ajoutant le Plugin PB2Web.

J'ai testé ce code avec Spiderbasic mais malheureusement ça n'a pas fonctionné. La gestion des variables est un peu spécial avec SpiderBasic.

Utilisant du coup une version concurrente de SpiderBasic, je ne vais pas trop m'attarder sur ce sujet :)
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Hebergé une application bi-directionnel PureBasic

Message par Kwai chang caine »

Aaaah bah ça...j'ai utilisé le bon éditeur du premier coups..comme quoi aux innocents les mains pleines 8O

Le mieux c'est d'utiliser des nom de codes comme pendant la guerre :?
"Les PBiens parlent aux SBiens..tou louloulou...la MODE fonctionne dans le "ProBleme TOUT WEB" :mrgreen:

Merci FALSAM 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Hebergé une application bi-directionnel PureBasic

Message par falsam »

Merci à vous pour ces premiers tests. (14 différentes adresses IP)
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Hebergé une application bi-directionnel PureBasic

Message par Kwai chang caine »

Bah en fait j'ai cliqué 3 fois sur ton lien...avec trois machines différentes
Et c'est la première fois que je vois les deux champs avec mon IP dans un des deux.
Peut être du au navigateur, j'utilise IE 8 max sur ces machines, alors que quand ça a marché j'étais sur mon téléphone
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre