无法在浏览器客户端中接收消息

时间:2013-07-02 14:58:05

标签: node.js publish-subscribe faye

我尝试创建pub-sub即时消息服务失败了。我无法在浏览器客户端中收到消息。

以下代码来自我的client1.html文件。我相信我遇到的麻烦与客户订阅'/ channel'失败有关。我添加了警报,并收到了'BEFORE&在''之后'而不是'DURING'并且message.text没有出现在控制台上。任何关于客户端无法在浏览器上看到消息的想法都将受到赞赏。

var client = new Faye.Client('/faye',{
    timeout: 20
});
alert("BEFORE client subscription");
client.subscribe('/channel', function(message) {
    $('#messages').append('<p>' + message.text + '</p>');
    alert("DURING client subscription");
    console.log(message.text);
});
alert("AFTER client subscription");

浏览器控制台重复重复以下错误:

POST http://my.server@server:8000/faye 404 (Not Found) 

此错误指向'faye-browser.js:2023',它引用以下行:

xhr.send(Faye.toJSON(message));

修改 的 这是server.js文件

var fs = require("fs");
var config = JSON.parse(fs.readFileSync("config.json"));
var host = config.host;
var port=config.port;
var express = require("express");
var Faye   = require('faye');
var bayeux = new Faye.NodeAdapter({mount: '/faye', timeout:45});
var app = express();
app.configure(function(){
  app.use(express.bodyParser());
  app.use(express.static('/'+__dirname));
});
app.post('/message', function(request, response){
  bayeux.getClient().publish('/channel', {text:request.body.message});
  console.log('broadcast message:' + request.body.message);
  response.send(200);
});
bayeux.attach(app);
app.listen(port);

1 个答案:

答案 0 :(得分:4)

我刚为我们的应用程序配置了Faye,你正在做

bayeux.attach(app);
app.listen(port);

对我没用,有效的是这个

bayeux.attach(app.listen(port, function() {}));

我还认为你在创建Faye时应该使用整个url,而不仅仅是最后一部分,如下所示:

var client = new Faye.Client('http://my.url.com/faye', { timeout: 20 });