Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Nachricht an ein Websocket zuordnen
BeitragVerfasst: 16 Feb 2012, 19:25 
Offline
Nuby

Registriert: 08 Feb 2012, 11:03
Beiträge: 9
Ich habe mir em-websocket für Ruby angeschaut:
https://github.com/igrigorik/em-websocket

Ich möchte mir einen kleinen eigenen Websocket Chat programmieren.
Dabei verbinden sich zwei Browser über Websockets zum Server und können Nachrichten senden u. empfangen.

Das senden von Nachrichten vom Browser zum Server ist kein Problem. Ich weiß aber nicht wie der Server die empfangene Nachricht an den richtigen Empfänger zuordnet der gerade über Websocket eine bestehende Verbindung zum Server hat.

Dafür muss man doch eine Websocket Verbindung identifizieren können, z.B. über eine Art ID?
Wie macht man so was in der Regel?


Nach oben
 Profil  
 
BeitragVerfasst: 17 Feb 2012, 15:49 
Offline
Interpreter
Benutzeravatar

Registriert: 18 Sep 2008, 22:32
Beiträge: 1411
Wohnort: NRW → UN
(Ohne mich mit Websockets oder em-websocket auszukennen, aber in der Annahme, dass es sich um keine persistente Verbindung handelt) Ich würde beim erstmaligen Herstellen der Verbindung dem jeweiligen Client eine ID zuweisen und sie ihm schicken. Bei jeder späteren Anfrage soll der Client dann seine ID mitsenden, sodass du ihn eindeutig identifizieren kannst. Statt einer einfachen numerischen ID (die ja möglicherweise durch einfaches Ausprobieren gefunden werden kann), kannst du ihm aber auch eine komplexere Session-ID zuweisen, die nicht so leicht herleitbar ist.

Vale,
Quintus

_________________
Habe den Mut, dich deines eigenen Verstandes zu bedienen! — Immanuel Kant

Mein Blog | Auf Twitter: @qquintilianus | PGP/GPG-Schlüssel: BF3A 614B D62B A4A0 C292 141C B875 5CB1 C592 A85A

Helft beim OpenRubyRMK, einem freien Programm zum erstellen von RPGs! (→ GitHub-Projekt)


Nach oben
 Profil  
 
BeitragVerfasst: 20 Feb 2012, 15:38 
Offline
Schüler

Registriert: 27 Jul 2010, 17:45
Beiträge: 41
Oder du legst serverseitig verschiedene Channels an, genug für verschiedene Zwecke. Soll ja ein Chat sein und kein 1:1 InstantMessaging, oder?


Nach oben
 Profil  
 
BeitragVerfasst: 22 Feb 2012, 09:52 
Offline
Nuby

Registriert: 08 Feb 2012, 11:03
Beiträge: 9
Ok die Bezeichnung Chat war nicht so genau, ich meinte schon eher ein 1:1 Messenger Verbindung.
Und doch es ist eine persistente TCP Verbindung gemeint.

Da ich immer noch nicht weiß wie man einzelne Websocket Verbindungen identifizieren kann fällt mir nur eine Möglichkeit ein:

Nach der Client Verbindung zum Ruby Websocket Server wird ein Timer ausgelöst der z.B. jede Sekunde anhand eines global verfügbaren Arrays überprüft ob für den User eine neue Nachricht da ist, wenn ja holt es sich die Nachricht aus der Datenbank und sendet es über die bestehende Verbindung.
Wenn der Verbindungsprozess selbst eine Nachricht bekommt schreibt es sie in die Datenbank und aktualisiert seinen Array Eintrag das eine neue Nachricht verfügbar ist.
Das heißt für jede Verbindung läuft so ein Timer (Event basierter Timer aus eventmachine), immerhin keine Performance lastige blockierende Schleife.


Nach oben
 Profil  
 
BeitragVerfasst: 22 Feb 2012, 12:48 
Offline
Metaprogrammierer

Registriert: 03 Feb 2008, 15:36
Beiträge: 624
Wohnort: Kamen, NRW
Wenn ich mich recht an meine letzten Spielereine mit WebSockets erinnere, wird auch eine eindeutige ID pro Verbindung generiert. Zumindest mit socket.io kommt man an diese ID dran.
Dann musst du am Server nur noch speichern wer mit wem kommuniziert und wer nun gerade unter welcher ID an einem WebSocket lauscht.

Pseudo-Code:
msg = recv
sender = User.find_by_session msg.id
receiver = User.find_by_in_contact_with sender
send receiver, msg.body

_________________
-


Nach oben
 Profil  
 
BeitragVerfasst: 24 Feb 2012, 07:13 
Offline
Nuby

Registriert: 08 Feb 2012, 11:03
Beiträge: 9
Konnte es nun mit node.js machen.

Bei eventmachine mit Ruby geht das glaube ich über die channels. Aber habe noch nicht genau verstanden wie das funktioniert.


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
cron