Also hier ist der Deal: Ich versuche, socket.io in einem Express-Projekt zu verwenden. Nachdem Express Js 4 gestartet wurde, habe ich meinen Express-Generator aktualisiert und jetzt gehen die anfänglichen Funktionen der App in die ./bin/www
Datei, einschließlich dieser Variablen (www-Dateiinhalt: http://jsfiddle.net/avMa5/ ).
var server = app.listen(app.get('port'), function() {..}
(Überprüfen Sie es bis npm install -g express-generator
und dannexpress myApp
Lassen Sie uns trotzdem daran denken, wie die Dokumente von socket.io uns bitten, sie abzufeuern:
var app = require('express').createServer();
var io = require('socket.io')(app);
Ok, aber ich kann es nicht in app.js machen, wie empfohlen. Dies sollte in ./bin/www erfolgen, um zu funktionieren. in ./bin/www ist dies, was ich tun kann, um es zum Laufen zu bringen:
var io = require('socket.io')(server)
Ok, das funktioniert, aber ich kann das io var nirgendwo anders verwenden, und ich möchte meine socket.io-Funktionen wirklich nicht in eine www
Datei einfügen .
Ich denke , das nur grundlegende Syntax ist, aber ich kann das nicht an der Arbeit, nicht einmal mit module.exports = server
oder server.exports = server
noch module.exports.io = app(io)
auf www - Datei
Die Frage ist also: Wie kann ich socket.io verwenden, wenn diese / bin / www-Datei als Ausgangspunkt für meine App dient?
quelle
./bin/www.
. Stellen Sie es einfach an den gleichen Ort, an dem Sie sichvar app
befinden.Antworten:
Ich habe eine Lösung, um socket.io in app.js verfügbar zu machen.
app.js:
bin / www:
Auf diese Weise können Sie auf die Variable io in Ihrer app.js zugreifen und sie sogar Ihren Routen zur Verfügung stellen, indem Sie module.exports als eine Funktion definieren, die io als Parameter akzeptiert.
index.js
Übergeben Sie dann io in das Modul, nachdem es eingerichtet wurde:
app.js.
quelle
app.io = io;
in derapp.js
Dateiapp
Objekt anzuhängen ? Verwenden Sie besser Symbole oderapp.set()
.app.io = io
wenn Siemodule.exports = { app, io }
stattdessen verwenden könntenEin etwas anderer Ansatz zum Initiieren
socket.io
: Er gruppiert den gesamten zugehörigen Code an einem Ort:bin / www
socketApi.js
app.js.
Auf diese Weise
socket.io
kann ich den gesamten zugehörigen Code in einem Modul und dessen Funktion von überall in der Anwendung aufrufen.quelle
io.attach is not a function
Es stellt sich heraus, dass es wirklich ein grundlegendes Problem mit der Sintax war ... Ich habe diese Zeilen aus diesem Chat-Tutorial für socket.io erhalten ...
am ./bin/www, gleich danach
var server = app.listen(.....)
Jetzt erstelle ich die Datei ../sockets/base.js und lege diesen kleinen Kerl hinein:
Ja! Jetzt funktioniert es ... Ich glaube, ich hatte wirklich keine andere Option als das Starten von socket.io in / bin / www, da dort mein http-Server gestartet wurde. Das Ziel ist, dass ich jetzt Socket-Funktionalität in anderen Dateien erstellen kann, wobei das Ding modular bleibt
require('fileHere')(io);
<3
quelle
io.on('connection', function(socket) { res.render('connection.jade') });
Bei den alten "expressjs" passiert alles in der Datei "app.js". Die Bindung von socket.io an den Server erfolgt also auch in dieser Datei. (Übrigens kann man es immer noch auf die alte Art machen und bin / www entfernen)
Jetzt mit den neuen Expressjs muss es in der "bin / www" -Datei geschehen.
Glücklicherweise machte es Javascript / requirejs einfach, Objekte weiterzugeben. Wie Gabriel Hautclocq betonte, wird socket.io immer noch in "app.js" "importiert" und über eine Eigenschaft an das "app" -Objekt angehängt
Die socket.io wird live geschaltet, indem der Server in "bin / www" daran angeschlossen wird.
weil das Objekt "app" früher an "bin / www" übergeben wurde
Es ist wirklich genauso einfach wie
Aber es "schwierig" zu machen, stellt das sicher
app.io
Wenn jetzt das Objekt socke.io gespeichert ist.Wenn Sie dieses socket.io-Objekt beispielsweise auch in "routen / index.js" benötigen, verwenden Sie einfach dasselbe Prinzip, um dieses Objekt weiterzugeben.
Zuerst in "app.js"
Dann in "routen / index.js"
Also wird "io" in "index.js" eingefügt.
quelle
Update zu Gabriel Hautclocqs Antwort:
In der WWW-Datei sollte der Code aufgrund von Aktualisierungen mit Socket.io wie folgt aussehen. Anhängen ist jetzt Hören.
Um diese Verbindung zum Laufen zu bringen, muss außerdem die clientseitige API implementiert werden. Dies ist nicht Express-spezifisch, aber ohne es funktioniert der Verbindungsaufruf nicht. Die API ist in enthalten
Fügen Sie diese Datei in das Frontend ein und testen Sie Folgendes:
quelle
Nachdem ich alle Kommentare gelesen hatte, kam ich mit Socket.io Server Version: 1.5.0 auf Folgendes
Probleme, auf die ich gestoßen bin:
var sockIO = require ('socket.io') sollte var sockIO = require ('socket.io') () sein . (Bildnachweis an: Zhe Hu )
sockIO.attach sollte sockIO sein. hören ( Bildnachweis : rickrizzo )
Schritte
Installieren Sie Socket.io mit dem folgenden Befehl:
Fügen Sie app.js Folgendes hinzu :
In bin / www nach var server = http.createServer (app) Folgendes hinzu:
Um die Funktionalität zu testen , können Sie in app.js die folgende Zeile hinzufügen:
quelle
Ein Tutorial für Anfänger von Cedric Pabst
hier sind die kurzen Grundlagen des Links für einen App-Chat:
Verwenden von Express-Generieren und der EJS-Engine, die in jedem Standard-Routing von .ejs-Dateien in Express-Generieren verwendet werden kann
Bearbeiten Sie die Datei bin \ www und fügen Sie diese app.io.attach (Server) hinzu. so was
in app.js bearbeiten
in index.ejs bearbeiten
Viel Spaß :) und vielen Dank an Cedric Pabst
quelle
Einige frühere Antworten funktionieren nicht und andere sind zu kompliziert. Versuchen Sie stattdessen die folgende Lösung ...
Installieren Sie serverseitige und clientseitige socket.io-Knotenmodule:
Serverseitig
Fügen Sie den folgenden Code ist / www nach der Serverdefinition,
var server = http.createServer(app);
:Client-Seite
Wenn Sie webpack verwenden, fügen Sie der Datei webpack entry.js den folgenden Code hinzu :
Getan. Besuchen Sie Ihre Website und überprüfen Sie die js-Entwicklerkonsole des Browsers.
quelle