BrainBoxLabs/brain-socket

Can't fire events from Laravel

Closed this issue · 43 comments

Using your chat example and running Event::fire('generic.event, []) from within Laravel does not produce anything on the client side (i.e., no console message although there is a listener registered in JS).

Chat works fine otherwise. Am I missing something?

P.S. I wish you guys used SockJS.

Hello!

You shouldn't need to call Event::fire since the package handles firing events on the server (from within Laravel) for you.

You are basically calling Event::fire in JS by using app.BrainSocket.message('generic.event');

Hope this helps.

SockJS does sound awesome though, unfortunately we are into shameless self-promoting so i'll see if I can come up with a good place for BrainSock in one of our upcoming packages, haha.

Thanks!

Thanks. It seems like Laravel doesn't see any message events. I need a way to to be able to fire a custom message from my controller or elsewhere to all connected clients.

I have the same question/issue. While running the server and client i can see the logs appearing when sending.

But in my case i collect data via a cron or another process and would like to broadcast the results after it is completed. How do i do this?

i'm guesing that the other proccess needs to connect to the websocket server and broadcast it.

WS = WebSocket

@goosechaser yep, in order to push messages from a controller you would need a way to connect to the WS server outside the instance currently running your WS server (In our example this is done via JavaScript).

CC: @goosechaser To: @marcvdm Your guess is correct and this would apply to both problems. If you can't connect to the WS server via JS then you will need a WS Client written in PHP. I've done some looking around for one but nothing is standing out. This package is built using Ratchet (http://socketo.me/) as a boiler plate for the WS code. Unfortunately they don't seem to offer a PHP Client Library (to connect to an existing WS server) either. Let me know if you find something and I will do the same.

I just don't understand.

So this package only provides an option to listen to the events which were fired from the js?
It there an option to give a feedback from the laravel application?

What if something had happened on the server side and I want to inform the client side about it?

Or, I should just call the:

BrainSocket::message('generic.event',array('message'=>'A message from a generic event fired in Laravel!'));

To send the messages to the front-end application? (doesn't work, I've tried)
But what is the purpose of the BrainSocket::message then?

I've installed the package and trying to test it now.
Thanks for the package.

Here http://socketo.me/docs/push, on the Ratchet website,

They suggest to use something like this:

  // This is our new stuff
    $context = new ZMQContext();
    $socket = $context->getSocket(ZMQ::SOCKET_PUSH, 'my pusher');
    $socket->connect("tcp://localhost:5555");

    $socket->send(json_encode($entryData));

But this construction also doesn't work for me. I even don't see the "Connection Established" message.

@PavelPolyakov Yep, you can still give feedback from Laravel, you just need to register to an event that the Client Library is calling.

eg.

===Client Side===
app.BrainSocket.message('server.some_event',{data:'some_data'});

===Server Side===
Event::listen('server.some_event',function($data){
        //send emails, update DB, etc.
    return BrainSocket::message('client.some_event',array('This event was fired from the server.'));
});

===Client Side===
app.BrainSocket.Event.listen('client.some_event',function(msg){
    //data returned from laravel
    console.log(msg);
        //msg.server.data has the data "This event was fired from the server"
});

Hopefully this helps, thanks!

The case is, that I want to give the feedback asynchronously and that is, as I understand, the sense of the WebSockets.

According to the current flow, as I understand, it's possible to send the message from the js part, and then receive an answer from the Laravel APP. It's ok.

But, there should be an option to send the message from the PHP app to the client. Like in the case which @marcvdm described. We do something in the background and then let the customer know.

Could you, please, update/adjust or just create an example so it would be possible? That would make the package 500% more powerful.

I also tried the next flow - connect to the server using telten and then just send the data there. But, when I'm connected, I don't see any messages about the new connection on the server. Also I don't see any incoming data.

@PavelPolyakov when you run the artisan command in terminal/command line do you see "Websocket server started on port 8080" etc? That is your first clue that the ws server is even running.

The push docs you are referring to are for a different process "push notifications" which this package doesn't currently support.

I'll do some research and see if there is a way to facilitate the request of sending messages from php instead of going through the client.

@BrainBoxLabs

Good, would wait for that.

I also thought about the other possible solution,
You can extend your websocket server (daemon), so it calls the application function time to time. And, when they return some answer - sends it to the clients.

So we, as developers, are able to register our functions and the server would call them.

But the solution when we simply can put something to the channel is certainly better then the one described above :) Looking forward for it.

upd, read about the push functionality ( http://socketo.me/docs/push ), looks like it's exactly the thing which would cover our needs. Would be perfect to have it integrated with this package.

Good luck

You can use various methods to enable push support. Ratchet on their guides use ZeroMQ as an example, but others will also work just fine.

In fact the React framework (http://reactphp.org/) supports all sorts of event driven libraries that you can use for push support. Such as Redis and STOMP (RabbitMQ). This is something we'll be integrating in to our app in the coming weeks. So we'll be happy to contribute any of our research and enhancements :)

@adamlc

Yes, we should be able to use ZeroMQ, but, the server which brainsocket runs currently does not implement WAMP.
So it's not possible to do that with this particular package.

Therefore it would be great, if the developers would shift from MessageComponentInterface implementation to WampServerInterface implementation. Which also supports the messages from the front-end.

https://groups.google.com/forum/#!topic/ratchet-php/v-ruRYKr28U

@adamlc @PavelPolyakov Thanks for the info guys, I will take a look at implementing the WAMP component / push notifications over the weekend / holidays!

So, to clarify, there is currently no way to send an event from the server to the client without the client first sending an event upstream? I've spent the weekend getting this all up and running (love the easy install process), but this is a deal-breaking roadblock.

I've looked, but I can't seem to find a way to grab the connection id from server-side so that I can address messages to specific connections. Am I blind? Because if there's no way to push events downstream, this entire thing is useless to me. :(

@cjthomp
Currently it is not possible to do that using this package, but the package author is working on this.
So we're waiting patiently :)

Well, less patient in my case, as I wasted the weekend going down a dead end and now have to find another solution to install and learn. :\

@cjthomp
The solution are the Push messages, which are supported by Ratchet.
You can try to integrate them ( http://socketo.me/docs/push ) to your project yourself. It's not difficult to do in particular.
But it's difficult to do that in abstract way.

I am currently working on a php client for this. I currently can connect

Connection Established!
Connection 504 has disconnected

Will let you guys know when it's completely working

Hi guys,

How does it goes? Any news?

Any update on this?

@cjthomp Hey sorry for the delay (to everyone else as well), been swamped this month. I'm currently working on a package for framework agnostic push notifications. I will be releasing it as a separate package as it follows a completely different architecture than the current BrainSocket package. BrainSocket is still viable for heavy front-end integration but the new package will be geared towards a more server side + client side implementation to satisfy requests for said functionality. Thanks!

@BrainBoxLabs
Good, when do you expect the beta of the new package available?

Good to hear that there's some progress. I guess the description of Brain Socket is slightly misleading since so many folks think it's a two-way communications package.

Right now, I am using a great solution that utilizes SockJS (http://sockjs.org) and Tornado (http://www.tornadoweb.org/en/stable/): Thunderpush (https://github.com/thunderpush/thunderpush). It has a PHP client and simple JS client. I can send messages from Laravel to all subscribers.

@BrainBoxLabs Excellent, I'll be eagerly awaiting this package, in the meantime I've found pusher.com a quick and easy way to achieve two-way comms.

Even today, i installed and implemented it and found it does nto support fireing events from laravel app. waiting for a better package which can handle the requirement of sending notifcation from php laravel app too..

Ok looks like I just submitted an issue regarding this very thing. Push notifications would be useful to send messages from the laravel controller directly out to all of the connected clients.

Hey @BrainBoxLabs any news on this?

Is this still being worked on? @BrainBoxLabs Would love this function!

@BrainBoxLabs Hey this is simply awesome; We are waiting on the new release that allows us to fire events from within a controller. I appreciate all your work!

So this is basically dead now, right? The push functionality isn't coming after all?

@cjthomp Looks more like it

Hey @cjthomp @itssasanka and anyone else reading this, The push notifications and other feature requests are being rolled out into a separate package we hope to release mid-late summer (this year). Unfortunately the current package requires (read: required) a full rewrite to incorporate all the features and architecture we need to have it scale.

I apologize that the current package seems abandoned but due to time constraints on other pressing matters we simply don't have the resources to maintain it while we move into something a little more flexible. Side note, pull requests are always welcome.

We also appreciate all the input and feedback we've gotten and assure you that it won't go un-noticed.

Thanks again for your patience and you will all be the first to know when we are ready to release the next adaptation.

Push me to

I too think that this package would be awesome with push from php.

As @cjthomp did, I spent some time installing and trying to make it work with async notifications until I found this thread.

I think you should make it clear in the description of the package (in http://brainsocket.brainboxmedia.ca/ for instance), that push notifications are not possible (yet) with this package.

A Laravel package that allows you to get up and running with real-time event-driven PHP apps using WebSockets

I think this a bit misleading.

Anyway, good work for this package.

Any updates on push notifications? The May 8th update suggested a mid-late Summer release, and we're now in November.

Also, thank you for your great work on this package; setting it up was a breeze and it's incredibly easy to use. Cheers!

@BrainBoxLabs Finally, something to send notifications frontend development from Laravel

hii..any update for push..

From where following msg comes
"A message from a generic event fired in Laravel!"
any idea?

hello all ..
if i want dynamic data from server instead of message..
then what i have to do??

anybody has example of use of "Ratchet" except chat application.?
Thanks

No updates or activity in coming up on a year, I think it's safe to say this is abandoned.

Do you have any idea to achive server side functionality?
which should be opensource :).