2012-03-26 3 views
0

Ich versuche genau zu verstehen, wo/wie ich node.js/Socketstream Server-Code implementieren sollte, die unabhängig von Client-RPC-Aufrufe ausgeführt wird. Als einfaches Beispiel versuche ich so etwas wie dies eine regelmäßige Uhr Update angeschlossenen Clients zu schieben auf der Server-Seite mit:Socketstream (0.3) serverseitigen Code Verwirrung

var pushTime = function() { 
    d = new Date(); 
    ss.publish.all('newServerTime', d); 
    return; 
}; 

setInterval(pushTime, 1000); 

und dem Kunden auf diese veröffentlichen Ereignis abonnieren Einrichtung sorta wie folgt aus:

ss.event.on('newServerTime', function(time) { 
    return $('#serverTime').val(time); 
}); 

Problem: wo stelle ich die serverseitige pushTime-Funktion her? Die Dokumente legen nahe, die/server/rpc Baum so habe ich es in /server/rpc/demo.js aber das ergibt diesen Fehler:

Reference: ss ist nicht

definiert Wohlgemerkt, ich bin nicht setzen der Code im Block export.actions; Ich glaube, das ist nur für Client-RPC-Anrufe.

versuchte ich ss am Anfang der Datei setzen:

ss = require('socketstream'); 

aber das muss doch falsch sein - jetzt die ‚publish.all‘ Methode nicht existiert.

Ich habe versucht, den Code an der Unterseite von app.js, gleich nach dem Aufruf von ss.start. Wieder heißt das, dass die publish.all-Methode nicht existiert (vielleicht erst, wenn ein Client angeschlossen ist?). Ich bin verloren. Jede Hilfe wird geschätzt; hoffe das war klar.

Antwort

1

Yup, Sie könnten diesen Code in Ihre Aktionen setzen, nichts, um Sie zu stoppen, aber besser, es in Ihre 'app.js' Datei zu legen.

Um die interne API von app.js zugreifen (derjenige, der bis zum/server/rpc Aktion Dateien gesendet wird) verwenden ss.api

Daher müssen Sie rufen:

ss.api.publish.all() 

aus Ihre 'app.js'-Datei.

Entschuldigung, dies wurde zuvor nicht dokumentiert. Ich werde die Dokumente in Kürze aktualisieren.

Owen

+0

Danke Owen - und danke für Socketstream. Ich hatte gehofft, dass die Antwort in etwa so war. Eine möglicherweise unverschämte Nachfolge - ich denke, ich werde das Projekt in coffeescript angehen. app.js lebt offensichtlich außerhalb des ss cs <> js link/kompilieren Ökosystems. Vorgeschlagener Arbeitsablauf? Soll ich einfach ein anderes Modul im Server-Api-Tree bauen und es irgendwie benötigen? – jlabrie

+0

Hey jlabrie.Sicher kannst du das tun (würde ich), oder app.js zu app.coffee ändern und deine App mit 'coffee app.coffee' starten. Persönlich bevorzuge ich die erste Option. – socketstream

0

Sie wissen nicht, wenn es um die Coding-Standards erfüllt, aber das funktioniert wahrscheinlich:

/server/rpc/demo.js

exports.actions = function(req, res, ss) { 
    setTimeout(function() { 
     ss.publish.all("newServerTime", new Date()); 
    }, 1000); 
} 

Wenn Sie die Dokumentation zu lesen Ich denke, man kann missbrauchen Aktionen für so ziemlich alles, nicht nur für RPC-Antworten.

+0

Danke Jan. Dies ist eine (viel) sauberere Art, den Testfall auszudrücken, den ich vorgeschlagen habe. Ich habe mich immer noch über den "richtigen" Home- und Execution-Pfad für den serverseitigen Code im SS-Ökosystem Gedanken gemacht, was meine eigentliche Sorge ist, da ich ein gutes Stück Timing und Logik des Spiels unabhängig von den Clients betreiben muss. . . – jlabrie