クライアントにメッセージを送信するようにnode.jsサーバーを設定しようとしています。クライアントは、jquery通知ライブラリを使用してメッセージを表示します。興味がある場合は、この通知ライブラリを使用しています:http: //needim.github.com/ noty/
その瞬間、リスナーに書き込むためのトリガーを持つテーブルでpostgresデータベースをセットアップしました。
トリガーは次のとおりです。
CREATE OR REPLACE FUNCTION new_noti() RETURNS trigger AS $$
DECLARE
BEGIN
PERFORM pg_notify('watchers', TG_TABLE_NAME || ',msg,' || NEW.msg );
RETURN new;
END;
$$ LANGUAGE plpgsql;
次に、次のようにnode.jsサーバーがあります。
var pg = require ('pg');
var pgConString = "pg://aydin:password@localhost/test"
var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, url = require('url')
app.listen(8080);
function handler (request, respsonse) {
var client = new pg.Client(pgConString);
client.connect();
client.query('LISTEN "watchers"');
client.on('notification', function(msg) {
console.log(msg.payload);
sendMessage(msg.payload);
});
}
function sendMessage(message) {
io.sockets.emit('notification', {'message': message});
}
次に、次のようなクライアントコードがあります。
<script type="text/javascript">
var socket = io.connect('http://localhost:8080');
socket.on('notification', function (data) {
console.log(data.message);
newNoty(data);
});
function newNoty(data) {
noty({
"text":data.message,
buttons: [{
type: 'button green',
text: 'Go to'
}],
"theme":"noty_theme_twitter",
"layout":"bottomRight",
"type":"information",
"animateOpen":{
"height":"toggle"
},
"animateClose":{
"height":"toggle"
},
"speed":500,
"timeout":7500,
"closeButton":true,
"closeOnSelfClick":true,
"closeOnSelfOver":false,
"modal":false,
});
}
</script>
これは機能しません。node.jsがpostgres通知を受信しないようです。これは、関数ハンドラーを使用していて、クライアントコードから実際にリクエストを実行していないためだと思います。これを行う方法と、それが正しい方法かどうかわかりませんか?リクエストではなく接続で起動できる関数はありますか?
そして、私もそれを正しい方法でやっていますか?node.jsがメッセージを送信するクライアント側にサーバーが必要ですか?クライアントがいつ利用可能であるかをどのように知るのですか?ヘルプやチュートリアルへのポインタをいただければ幸いです。ありがとうございました。