Cue-Handlung: Es ist das frühe 21. Jahrhundert, und die meisten Dinge gehören der Vergangenheit an. Sie und Ihre Mitstreiter sind jedoch auf der Suche nach einer Nachstellung der neunziger Jahre. Als Teil dieser Herausforderung müssen Sie einen minimalistischen Chatroom neu erstellen.
Das Ziel: Einen Chatroom mit möglichst wenigen Bytes erstellen. Das Programm, das Sie schreiben, fungiert als einfacher Server, der eine Webseite bereitstellt, auf der Benutzer Text auf dem Bildschirm veröffentlichen können.
Das eigentliche Ziel: Einen funktionierenden Chatroom von Ihrem eigenen Computer aus hosten. Sie müssen das nicht tun, aber auf diese Weise macht es viel mehr Spaß.
Bedarf:
- Benutzer sollten in der Lage sein, sich einen Benutzernamen zu geben, der für die Sitzung gültig ist
- Benutzer sollten in der Lage sein, wiederholt Text einzugeben und zu übermitteln, der anderen Benutzern angezeigt wird
- Jeder Benutzer sollte in der Lage sein, den von allen Benutzern eingereichten Text zusammen mit den Benutzernamen der Absender zu sehen, und die Informationen sollten in chronologischer Reihenfolge angezeigt werden
- Die Seite sollte auch die Anzahl der Online-Benutzer und eine Liste ihrer Benutzernamen anzeigen
- Ihr Chatroom sollte für jeden im Internet zugänglich sein, der weiß, wo er zu finden ist (z. B. die IP-Adresse zu kennen).
- Es sollte in modernen Webbrowsern funktionieren.
Alles andere liegt bei Ihnen!
Einsendungen:
- Sollte den Quellcode oder einen Link zum Quellcode enthalten
- Sollte Screenshots des funktionierenden Chatrooms enthalten
- Sollte die Gesamtgröße aller von Ihnen geschriebenen Programme / Dateien in Byte enthalten, die erforderlich sind, damit sie funktionieren.
Diese Herausforderung ist jetzt schon eine Weile in der Sandkiste, also sind hoffentlich alle Probleme gelöst.
Antworten:
PHP + JQuery + HTML + CSS, 1535 Byte
Dies ist ein Beitrag, der eher dem entspricht, was das OP als "das eigentliche Ziel" ansieht. Dies ist ein voll funktionsfähiger Chat-Server, der auf nahezu jedem Webserver gehostet werden kann.
Die Funktionalität umfasst:
Um eine Sitzung zu sein, geben Sie einen Alias in das entsprechende Feld ein und drücken Sie Taboder Enter, um zu übermitteln. Wenn der Alias bereits verwendet wird, werden Sie benachrichtigt. Das Senden von Nachrichten erfolgt ebenfalls über Enter.
Ein Archiv aller Dateien finden Sie hier: chat.zip (wählen Sie "Download" im Menü "Datei"). Entpacken Sie zum Installieren in ein Webverzeichnis auf einem Server, auf dem PHP 5.4 oder höher ausgeführt wird.
Vorsichtsmaßnahmen:
cache:false
zu jeder Ajax-Anfrage behoben werden .change
Ereignis nicht ausgelöst wird (das Drücken der Tabulatortaste funktioniert jedoch). Dies kann behoben werden, indem Sie einenonkeypress
Handler hinzufügen , prüfen, ob der Schlüssel die Eingabetaste ist, und dann anrufen$(v).blur().focus()
.Kurz gesagt, IE wird nicht unterstützt.
Klient
Die Positionierung von Elementen könnte etwas robuster sein, sollte aber mit einer minimalen Fenstergröße von ca. 800x600 gut aussehen.
chat.htm (190 Bytes)
c.css (136 Bytes)
c.js (435 bytes)
Server
Ich entschuldige mich dafür, dass der Server in so viele kleine Brocken aufgeteilt wurde. Die Alternative wäre die Verwendung eines geeigneten Nachrichtenprotokolls (über JSON-Codierung / -Decodierung) oder die Verwendung eines großen Protokolls,
if ... elseif ...
nach dem Post-Variablen vorhanden sind. Das Erstellen separater Skripte, eine einfache Anforderung von dem, den Sie benötigen, ist viel kürzer und möglicherweise einfacher als beide.o.php (119 bytes) O pens als verbindung zur 'datenbank'
c.php (57 Byte) C ommits ändert sich in den 'Datenbank'
p.php (151 bytes) P olls für neue Nachrichten
s.php (62 bytes) S Beendet eine Nachricht an den Server
u.php (222 bytes) U ser Anmeldung oder Alias Änderung
n.php (65 Bytes) Ruft die Liste der Benutzer n artien
l.php (98 bytes) Benutzer hat l eft (Browser geschlossen)
quelle
onchange=u
ohne die Klammern auskommen. Sie werden jedoch keinen konsistenten Kontext erhalten, aber Sie brauchen ihn trotzdem nicht.Python, 230
Dies ist ziemlich minimal, aber es scheint den Spezifikationen zu entsprechen. Benutzer werden als "Anzeigen der Seite" gezählt, wenn sie in den letzten 99 Sekunden gechattet haben.
Dies verwendet einen meiner beliebtesten Tricks in Python: Standardwerte sind nur Verweise auf alles, was Sie übergeben haben. Wenn es sich um ein veränderbares Objekt handelt, wird es nur für die Fahrt bereitgestellt.
Ein anderes, das ich nicht oft benutze - Currys!
Server ausführen:
Führen Sie den Chat - Skript aus Python (zum Beispiel
python chat.py
) und dann Ihren Browser darauf anhttp://localhost:8080
so etwas wie zu sehenPython, 442
Dieser ist eigentlich schön zu bedienen. Dies ist Golf, daher halte ich dies für eine weniger zufriedenstellende Lösung. Jetzt missbrauche ich einen Iframe und ein Formular mit Schlüsselbehandlung ... und eine Meta-Aktualisierung, um nach neuen Inhalten zu suchen.
quelle
http://localhost:8080/c
Ihren HTTP-Server zugreifen kann8080
, können Sie Folgendes voranstellen, um einen anderen Port zu verwenden:S.config.update({'server.socket_port':8090})
Meteor: 575 Zeichen
Ich hatte viel Spaß mit diesem! Die Anwendung ist live unter http://cgchat.meteor.com/ verfügbar .
chat.html: 171 zeichen
lib / chat.js: 45 Zeichen
client / client.js: 359 Zeichen
quelle
Node / Meteor Javascript + HTML + CSS + Websocket: 1.105 Bytes
Hier ist eine mit node.js / meteor . Natürlich in js, Echtzeit und mit Websockets geschrieben. Verwendet die Standardpakete von meteor.
Es könnte viel kleiner sein. Auch durch den enthaltenen Mongo ist es hartnäckig (nicht, dass das eine gute Sache ist).
Ein funktionierender Screenshot:
Zum Ausführen installieren Sie meteor.
Linux:
Windows: win.meteor.com
Klone mein Repo und führe den Meteor aus:
Zeigen Sie mit Ihrem Browser auf localhost: 3000
chat.js: 703 Bytes (Client / Server):
chat.css: 132 bytes
chat.html: 270 bytes
quelle
chat.html
scheint nur 254 Bytes zu haben. Beachten Sie, dass Browser nicht sonderlich wählerisch sind - ich möchte Tags nicht schließen, und Sie benötigen definitiv keinen Schrägstrich am Ende von Tags (es sei denn, der Knoten benötigt diesen?). Töte auch mehr Leerzeichen! Ich sehe ein paar im Javascript und viel zu viel im HTML.