0

我有一个 AngularJS 应用程序作为 Primus 客户端,它能够连接到 Primus 服务器并发送到 Primus 服务器也没有任何问题。

我构建了一个新的 NodeJS 应用程序,但充当 Primus 客户端。它和我的 Primus 服务器在同一台机器上。这是我用来连接 Primus 服务器的代码。它能够连接到它,因为我看到它连接时生成的哈希。

var http   = require('http'),
    server = http.createServer(),
    Primus = require('primus'),
    primus = new Primus(server, { transformer : 'sockjs' }),
    Socket = primus.Socket;

var client = new Socket('http://192.168.1.50:7777');

// prmius.use('emit', require('primus-emit'));
// client.use('emit', require('primus-emit'));

// primus.emit('motion-sensor-on', { isActive : true, area : 'living-room', src : 'node' });
client.emit('motion-sensor-on', { isActive : true, area : 'living-room', src : 'node' });

client.emit 被执行,但 Primus 服务器没有收到它。它在同一台机器上。我要再次提到它,当我启动节点应用程序时,它能够连接到 primus 服务器。以前,我首先尝试了 primus.emit,但我的 primus 服务器也无法接收它。

4

1 回答 1

0

我终于搞定了!!!

好吧,我刚刚添加了一个新的侦听器和事件名称“数据”。看起来如果您使用套接字或 client.write 从服务器作为客户端发出,则不应指定事件名称。所以我在服务器上作为客户端的最新工作代码是

client.write({ isActive : true, area : 'living-room', src : 'node' });

然后在primus服务器上,代码是

spark.on('data', function(data) {
    console.log(spark.id, 'received message:', data);
    primus.write(data);
});

老实说,我不确定为什么自定义事件名称在浏览器中使用时有效,但在您从 NodeJS 应用程序内部发送时却无效。太糟糕了!也许,我错过了一个代码。没有把握!无论如何,我现在可以从我的浏览器和手机中看到运动传感器的变化。

于 2015-06-02T02:23:11.087 回答