pl: Update einer Chatfunktion

Beitrag lesen

He Jo,

Ja ich versteh das schon aber die Demo macht ja noch nicht das was ich erreichen möchte. Nämlich erstens : Den Chatverlauf in einer DB, in unterschiedlichen Tabellen speichern. Und zweitens : Ein Client kann sich nicht aussuchen von welchen anderen Clients er Nachrichten empfangen will. Bzw. welche bei ihm ankommen. Wenn ich das nach meinen Wünschen modifizieren könnte müsste ich nicht fragen.

Bei einem Chat per Websocket läuft alles über den Sever. Dem wird eine eindeutige Kennung mitgegeben, welcher Client sich da verbindet. Dieser Kennung, nennen wir sie Session-ID (SID) ist gleichermaßen ein Nickname zugeordnet.

Jede Nachricht schickt die eigene Kennung mit und ggf. eine Kennung desjenigen Clients, für den die Nachricht bestimmt ist. Hier mal einen Auszug vom CODE aufm Server:

            utf8 => sub {
                my ($conn, $msg) = @_;
                my $msgobj = from_json($msg); # Nachricht auspacken
                                              # für Random Access
                
                my $sid = $msgobj->{sid};
                my $nickname = $msgobj->{nickname};
                $JOINS{$sid} = $nickname if $nickname && $sid;
                my @joined = grep {length $_} sort values %JOINS;
                my $diamond = pack "UUU", 0x20,0x25C6,0x20; 
           
                # Anwesenheitsliste
                $msgobj->{joined} = join $diamond, map{ents($_)} @joined;
                # Zeitstempel einfügen
                $msgobj->{time} = strftime("%X", localtime);
                $msg = to_json($msgobj);

                # Private Nachricht nur an bestimmte SID
                if(my $tosid = $msgobj->{tosid}){
                    for ($conn->server->connections){
                        next if $_->{SID} ne $tosid;
                        $_->send_utf8($msg);    
                    }
                }
                else{
                    # Broadcast
                    $_->send_utf8($msg) for $conn->server->connections;      
                }

                # Hier kann die Log-DB beschrieben werden
                # oder Ausgabe in die Console
                #print Dumper $msg;
            },

Jede Chat-Nachricht enthält die eigene SID, Nickname und die Nachricht selbst als JSON Sequenz verpackt. Aufm Server wirds ausgepackt damit der Zeitstempel hinzugefügt werden kann. Und es wird geschaut, ob die Nachricht nur an eine bestimmte SID gehen soll. Außerdem wird die Anwesenheitsliste hinzugefügt und dann wird alles wieder als JSON eingepackt und zurückgeschickt: Entweder an alle Clients (Broadcast) oder nur an einen bestimmten Client.

Guck Dir mal das JS im Life Chat an (der loggt nicht). So kompliziert ist das garnicht.

.pl

0 151

Update einer Chatfunktion

j4nk3y
  • html
  • javascript
  • php
  1. 2
    Felix Riesterer
    • datenbank
    • php
    • sicherheit
    1. 0
      j4nk3y
      1. 0
        Gunnar Bittersmann
    2. 0
      Gunnar Bittersmann
      1. 0
        Matthias Apsel
        1. 0
          Gunnar Bittersmann
      2. 0
        j4nk3y
        1. 0
          Gunnar Bittersmann
          1. 0
            j4nk3y
      3. 0
        Felix Riesterer
        1. 0
          j4nk3y
          • zur info
          1. 1
            Felix Riesterer
            • php
            • programmiertechnik
            • zur info
            1. 0
              j4nk3y
        2. 0
          Gunnar Bittersmann
    3. 0
      j4nk3y
      1. 0
        Felix Riesterer
        • php
        • programmiertechnik
        • sicherheit
        1. 0
          j4nk3y
          1. 0
            Der Martin
            1. 0
              j4nk3y
              1. 0
                Der Martin
                1. 0
                  j4nk3y
          2. 0
            Felix Riesterer
            1. 0
              j4nk3y
              1. 0
                Der Martin
                1. 0
                  j4nk3y
              2. 1
                dedlfix
                1. 0
                  Gunnar Bittersmann
                  • typografie
                2. 0
                  j4nk3y
                  1. 0
                    dedlfix
                    1. 0
                      j4nk3y
                      1. 0
                        dedlfix
                        1. 0
                          j4nk3y
                          1. 0
                            dedlfix
                            1. 0
                              j4nk3y
                              1. 0
                                Der Martin
                                1. 0
                                  j4nk3y
                                  1. 0
                                    Der Martin
                              2. 1
                                dedlfix
                                1. 0
                                  Der Martin
                              3. 0
                                Gunnar Bittersmann
                                • datenbank
                                • programmiertechnik
                                1. 0
                                  j4nk3y
        2. 0
          Der Martin
        3. 0
          Gunnar Bittersmann
          • internationalisierung
          • php
          1. 0
            Felix Riesterer
            1. 0
              Tabellenkalk
              • zitat
              • zu diesem forum
              1. 1
                Matthias Apsel
    4. 0
      1unitedpower
      1. 1
        dedlfix
        1. 1
          1unitedpower
          1. 0
            Christian Kruse
          2. 0
            dedlfix
            1. 0
              1unitedpower
              1. 0
                dedlfix
                1. 0
                  Christian Kruse
                  1. 0
                    dedlfix
                  2. 0
                    1unitedpower
                    1. 0
                      Christian Kruse
                      1. 0
                        1unitedpower
                    2. 0
                      dedlfix
                      1. 0
                        1unitedpower
                        1. 0
                          dedlfix
  2. 0
    j4nk3y
    1. 0
      Gunnar Bittersmann
      • html
      1. 0
        j4nk3y
        1. 0
          Gunnar Bittersmann
          1. 0
            j4nk3y
            1. 0
              Matthias Apsel
              1. 0
                j4nk3y
  3. 0
    j4nk3y
  4. 0
    pl
    1. 0
      j4nk3y
      1. 0
        dedlfix
        1. 0
          j4nk3y
          1. 0
            dedlfix
            1. 0
              j4nk3y
              1. 0
                pl
                1. 0
                  j4nk3y
                  1. 0
                    pl
                    1. 0
                      dedlfix
                      1. -2
                        pl
                        1. 0
                          Matthias Apsel
                  2. 0
                    pl
              2. 0
                dedlfix
                1. 0
                  j4nk3y
                  1. 0
                    dedlfix
            2. 0
              j4nk3y
              1. 0
                dedlfix
      2. 0
        pl
  5. 0
    j4nk3y
    1. 0
      dedlfix
    2. 0
      j4nk3y
      1. 0
        j4nk3y
        1. 0
          pl
        2. 0
          dedlfix
          1. 0
            j4nk3y
            1. 0
              dedlfix
              1. 0
                j4nk3y
          2. 0
            j4nk3y
            1. 0
              j4nk3y
  6. 0
    j4nk3y
    1. 0
      Der Martin
      1. 0
        j4nk3y
        1. 0
          dedlfix
          1. 0
            j4nk3y
            1. 0
              Der Martin
              1. 0
                j4nk3y
        2. 0
          Der Martin
          1. 0
            j4nk3y
            1. 1
              Felix Riesterer
              1. 0
                j4nk3y
                1. 0
                  Matthias Apsel
                  1. 0
                    j4nk3y
                    • menschelei
                2. 0
                  Felix Riesterer
                  • php
                  • programmiertechnik
                  • sql
                  1. 0
                    j4nk3y
                    1. 0
                      Der Martin
                      1. 0
                        j4nk3y
                        1. 0
                          Der Martin
                          1. 0
                            j4nk3y
                            • menschelei
                    2. 0
                      Felix Riesterer
                      1. 0
                        pl
                      2. 0
                        j4nk3y
                        1. 2
                          dedlfix
                          1. 0
                            j4nk3y
                            1. 0
                              dedlfix
                              1. 0
                                Christian Kruse
                                1. 1
                                  dedlfix
                  2. 0
                    j4nk3y
                  3. 0
                    j4nk3y
                    1. 0
                      Felix Riesterer
                      1. 0
                        dedlfix
                        1. 0
                          j4nk3y
                          1. 0
                            pl
                            1. 0
                              j4nk3y
                          2. 0
                            dedlfix
                      2. 0
                        j4nk3y
                        1. 0
                          Der Martin
                        2. 0
                          Felix Riesterer
                          1. 0
                            Der Martin
                            1. 0
                              dedlfix
                          2. 0
                            j4nk3y
                            1. 1
                              Der Martin
                              1. 0
                                j4nk3y
    2. 0
      j4nk3y
      1. 0
        dedlfix
        1. 0
          j4nk3y
          1. 0
            Christian Kruse
            1. 0
              j4nk3y
              1. 0
                Christian Kruse
              2. 0
                Matthias Apsel
                • zu diesem forum
                1. 0
                  j4nk3y