Question

I'm unsuccessfully attempting to create an pub-sub instant messaging service. I am unable to receive messages in browser client.

The following code is from my client1.html file. I believe the trouble I'm having relates to the client unsuccessfully subscribing to '/channel'. I've added the alerts and am receiving the 'BEFORE & AFTER' but not the 'DURING' and the message.text is not appearing on the console. Any thoughts as to why a client cannot see the messages on the browser would be appreciated.

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");

The browser console repeats the following error repeatedly:

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

This error points to 'faye-browser.js:2023' which refers to the following line:

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

EDIT This is is the server.js file

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);
Was it helpful?

Solution

I've just configured Faye for our application, you are doing

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

did not work for me, what worked is this

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

I also think that you should use the whole url when you are creating Faye, not just the final part, like so:

var client = new Faye.Client('http://my.url.com/faye', { timeout: 20 });
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top