BrainBoxLabs / brain-socket

Websockets for event-driven laravel apps.
589 stars 75 forks source link

Can't fire events from Laravel #1

Closed goosechaser closed 10 years ago

goosechaser commented 10 years ago

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.

BrainBoxLabs commented 10 years ago

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!

goosechaser commented 10 years ago

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.

marcvdm commented 10 years ago

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.

BrainBoxLabs commented 10 years ago

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).

BrainBoxLabs commented 10 years ago

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.

PavelPolyakov commented 10 years ago

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.

PavelPolyakov commented 10 years ago

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.

BrainBoxLabs commented 10 years ago

@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!

PavelPolyakov commented 10 years ago

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.

BrainBoxLabs commented 10 years ago

@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.

PavelPolyakov commented 10 years ago

@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

adamlc commented 10 years ago

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 :)

PavelPolyakov commented 10 years ago

@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

BrainBoxLabs commented 10 years ago

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

cjthomp commented 10 years ago

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. :(

PavelPolyakov commented 10 years ago

@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 :)

cjthomp commented 10 years ago

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. :\

PavelPolyakov commented 10 years ago

@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.

marcvdm commented 10 years ago

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

PavelPolyakov commented 10 years ago

Hi guys,

How does it goes? Any news?

cjthomp commented 10 years ago

Any update on this?

BrainBoxLabs commented 10 years ago

@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!

PavelPolyakov commented 10 years ago

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

goosechaser commented 10 years ago

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.

Leenug commented 10 years ago

@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.

dipesh008 commented 10 years ago

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..

ghost commented 10 years ago

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.

Leenug commented 10 years ago

Hey @BrainBoxLabs any news on this?

T00mm commented 10 years ago

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

itssasanka commented 10 years ago

@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!

cjthomp commented 10 years ago

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

itssasanka commented 10 years ago

@cjthomp Looks more like it

BrainBoxLabs commented 10 years ago

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.

viwiv commented 10 years ago

Push me to

nassimbenkirane commented 10 years ago

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.

andrewrice commented 10 years ago

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!

chernandezq commented 9 years ago

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

jignesh87 commented 9 years ago

hii..any update for push..

jignesh87 commented 9 years ago

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

jignesh87 commented 9 years ago

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

jignesh87 commented 9 years ago

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

cjthomp commented 9 years ago

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

jignesh87 commented 9 years ago

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