繁体   English   中英

node.js服务器和客户端sideo代码进行连接

[英]node.js server and client sideo code to connect

我正在尝试设置一个node.js服务器以将消息发送到客户端,然后该客户端将使用jquery通知库显示消息。如果有人的话,我正在使用此通知库: http : //needim.github.com/ y /

目前,我已经建立了一个带有表的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将消息发送到该服务器? 如何知道客户何时可用? 任何帮助或指南的指针将不胜感激。 谢谢。

在客户端发送HTTP请求之前,您实际上并没有建立数据库连接。 由于同源问题,您似乎永远不会发生这种情况(您的客户端代码似乎来自您显示的服务器以外的其他地方)。

无论如何,您可能想响应io.sockets"connection"事件来io.sockets "connection" (即,将HTTP请求处理程序中当前存在的内容移到那里)。 这就是“知道客户端何时可用”的方式。 或者,也许您应该将其作为初始化的一部分。 您的客户端代码似乎还可以,但是它没有上下文,因此很难判断它是否真正满足您的需求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM