• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] Server-Push bei Postgresql-Notification [Benachrichtigung bei eingehenden Anrufen]

Ciatronical

New member
Hey All,

Asterisk ruft via ODBC eine PlPgSql-Funktion, die Anrufdaten in eine PostgreSql-Tabelle schreibt und eine Notification auslöst, auf.
Die Notification beinhaltet die Daten des aktuellen Anrufes. Diese werden auch einige Zeit in der Konsole ausgegeben.

Code:
var pg = require ('pg');
var pgConString = "pg://postgres:geheim@localhost:5432/meineDB"

pg.connect(pgConString, function(err, client) {
  if(err) {
    console.log(err);
  }
  client.on('notification', function(msg) {
    console.log(msg);
  });
  var query = client.query("LISTEN crmti_watcher");
});

Die Daten der DB-Verbindung sind via Php verfügbar.
(stehen derzeit in der $_SESSION)

1. Wie kann ich die in Php vorhanden DB-Anmeldedate nach Node übertragen??
2. Warum quittiert mein Node-Script nach einiger Zeit von selbst seinen Dienst??
3. Wie kann ich beim Clienten eine Funktion auslösen die, die Anrufer-Liste verlängert??

Dank und Gruß

Ronny
 
Keine Ahnung was Asterisk ist.

Aber
Ciatronical schrieb:
1. Wie kann ich die in Php vorhanden DB-Anmeldedate nach Node übertragen??
Einen Datenaustausch Zwichen PHP und Node machst du ganz einfach über ein TCP/UDP Verbindung oder wenn du in Linux bist über sogenannte Pipes.
Was ich allerdings nicht versteh warum du das machen möchtest du kannst ja von Node und von php auf deinen Datenbankserver zugreifen.

Ciatronical schrieb:
2. Warum quittiert mein Node-Script nach einiger Zeit von selbst seinen Dienst??
Naja in der Regel ist es so das eine hergestellte Datenbankverbindung auch wider geschlossen werden muss, ist das nicht der Fall kommt ein Error.

Ciatronical schrieb:
3. Wie kann ich beim Clienten eine Funktion auslösen die, die Anrufer-Liste verlängert??
Das geht über sogenannte websocket's, wenn sich auf den server was tut lässt du einen Server Push los und auf der Client Seite passirt dann etwas.
 
Hey,
danke für die Antworten. Ich habe es jetzt so:

Server
Code:
var pg = require ('pg');
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var path = require('path');
var i = 0;
var pgConString = "pg://" +  process.argv[2] + ":" +  process.argv[3] + "@localhost:" +  process.argv[4] + "/" +  process.argv[5];
if(  process.argv[5] == undefined ) console.log( 'Usage: server.js User Passwd Port Database'  );
console.log( pgConString )

app.get('/', function(req, res){
    res.sendFile('example-client.html');
});

pg.connect(pgConString, function(err, client) {
  if(err) {
    console.log(err);
  }
  client.on('notification', function(msg) {
      //console.log(msg);
      io.emit('chat message', msg.payload );
      console.log(msg.payload );
  });
  var query = client.query("LISTEN crmti_watcher");
});


io.on('connection', function(socket){
    socket.on('chat message', function(msg){
        console.log('message: ' + msg);
        io.emit('chat message', msg  );
    });
});

http.listen(3000,"0.0.0.0", function(){
  console.log('listening on *:3000');
});

// Inspirationen:
//http://socket.io/get-started/chat/
//http://www.gianlucaguarini.com/blog/nodejs-and-a-simple-push-notification-server/
//http://bjorngylling.com/2011-04-13/postgres-listen-notify-with-node-js.html
//https://denibertovic.com/talks/real-time-notifications/#/6

Client

Code:
<!doctype html>
<html>
  <head>
    <title>Socket.IO chat</title>
  </head>
  <body>
    <ul id="messages"></ul>
    <script src="/socket.io/socket.io.js"></script>
    <script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
    <script src="http://code.jquery.com/jquery-1.11.1.js"></script>
    <script>
      var socket = io();
      $('form').submit(function(){
        socket.emit('chat message', $('#m').val());
        $('#m').val('');
        return false;
      });
      socket.on('chat message', function(data){
        var call = JSON.parse(data);
        $('#messages').append($('<li>').text('tsts ' + call ));
        $('#messages').append($('<li>').text('test2 ' + call.crmti_src ));
      });

    </script>
  </body> 
</html>

Asterisk ist eine Telefonanlagen-Software

Die Anmelde-Daten übertrage ich via Comandline Parameter.

Nach dem ich pg via npm statt mit apt-get installiert habe läuft der Server durch.

Nun ergeben sich zwei neue Fragen:

Wie baue ich den Code in meine vorhandene Seite ein?? Funktioniert das mit load()??
Kann ich von aussen auf die Seite zugreifen ohne das ich den Port 3000 in der Firewall forwarden muss??
 
Wie baue ich den Code in meine vorhandene Seite ein?? Funktioniert das mit load()?
Warum willst du da mit load() arbeiten? Binde die JS-Dateien doch einfach dort auch ein und ändere den JS-Code so, dass das Socket auf auch den richtigen Server und richtigen Port zeigt.

Kann ich von aussen auf die Seite zugreifen ohne das ich den Port 3000 in der Firewall forwarden muss?
In der Firewall muss der Port 3000 natürlich offen sein, wenn du von außen zugreifen willst.
 
Warum willst du da mit load() arbeiten? Binde die JS-Dateien doch einfach dort auch ein und ändere den JS-Code so, dass das Socket auf auch den richtigen Server und richtigen Port zeigt.

Ok. Werde ich mal so versuchen.

In der Firewall muss der Port 3000 natürlich offen sein, wenn du von außen zugreifen willst.

Ich wollte eigentlich keinen extra Port benutzen. Das geht doch bei Facebook, etc auch.
Vielleicht kann man die .htaccess so modifizieren das Anfragen an ein bestimmtes Verzeichnis (node/)
nach servername:3000 weitergeleitet werden.
 
Zurück
Oben