Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Sep 01 14:59
    Build #960 passed
  • Aug 23 11:48
    Build #959 passed
  • Aug 16 08:32
    Build #958 passed
  • Aug 13 18:35
    Build #957 passed
  • Aug 12 02:43
    Build #955 passed
  • Aug 10 01:56
    Build #954 passed
  • Jul 25 03:14
    Build #953 passed
  • Jul 24 15:23
    Build #952 passed
  • Jun 23 22:19
    Build #949 passed
  • May 02 19:15
    Build #948 passed
  • May 02 07:02
    Build #947 passed
  • May 02 06:58
    Build #946 passed
  • Apr 29 23:06
    Build #940 passed
  • Apr 28 18:15
    Build #938 passed
  • Apr 28 18:09
    Build #937 passed
  • Apr 25 13:21
    Build #936 passed
  • Feb 15 20:24
    Build #935 passed
  • Feb 14 01:00
    Build #932 passed
  • Jan 13 14:37
    Build #930 passed
  • Jan 10 17:42
    Build #929 passed
Kenneth Avner
@kenavn
Just curious: I was looking into the .net version to assess the state of protoactor, and whether to use it for an upcoming project. It looks really interesting, and contains a lot of nice design choices. I am indeed aware of the 0.2 version, but I cannot see that much has happened in the repo during the last months. I built a test project, and also found that my newest tooling for protobuf (3.7.0) was not compatible with the packaged version (3.5.1) in the repo. A lot of outdated dependencies - for the moment 31, and also 7 cases of different versioned nuget references across the solution. I guess you are all focused on the golang version, or is it something I did not catch here? It all seems a tad stale at the moment :)
Nils Plaschke
@Chumper
It indeed does seems a bit stale. I am interested in the go version, but it seems that roger is focusing on kotlin atm. and Potter is working on .Net and is porting to go.
but if you create PRs they get merged pretty fast. So you can always contribute ;)
Kenneth Avner
@kenavn
@Chumper I am absolutely willing to contribute if I decide to use this :) I was just curious on whether it was a technical reason behind the staleness, or if it's just a lack of resources..
Emil Ingerslev
@emilingerslev
@PotterDai We’ve been having some problems with tracking panics in our code. We get errors back stating that there was a problem and the supervisor is restarting the node, and we get the reason, but no stacktrace. Like this:
{"level":"error","@timestamp":"2019-04-15T07:33:31.295Z","message":"[SUPERVISION] Got error","log_type":"app","fields":{"actor":"127.0.0.1:8080/server","directive":"RestartDirective","reason":"runtime error: invalid memory address or nil pointer dereference","context.subject":"supervision”}}
Isn’t it possible to get better error than this?
SixFootRhino
@SixFootRhino

Hey folks just starting to look at Proto.Actor for an upcoming AAA online-only game prototype using Unreal Engine 4. I'm Rhino, nice to meet everybody.

The prototype (and eventual game) leverages an existing centralized global data store for all all account / player / inventory and world data exposed via a REST API, but due to latency requirements we will have presence throughout the world in many datacenters to minimize latency between grouped players who are matched up. Matches are simulated by a Unreal Engine Dedicated Server instance that has all players for that match connected, and we choose the location of that server from the available datacenter presences to provide best overall experience for the players who are to be grouped up. Players are matched with an algorithm that optimizes latency quality and equality.

The idea is to keep as much traffic local to a presence as possible during a match to increase responsiveness, reduce overall load on the global system. So I'm thinking the dedicated servers will speak to microservices / actors within the local environment, and those will in turn sync-up with the global system on an as-needed basis. This will allow both goals to be achieved: providing a more responsive API layer to the dedicated simulation servers, while reducing overall load upon the global system. We also want to keep as much of the game services logic outside of the dedicated server process, and have it stick to what it does well: simulate movement, combat, physics, etc.

The first things that come to mind with this plan are:

1) Given protoactor is Go / C#, what's he best way to integrate with UE C++ / Blueprints for our dedicated servers? Do you know of anybody who has done this? UE4 has a nice plugin architecture and I could certainly write a plugin in C++ that interfaces with C# via COM Interop. Alternatively, I could leverage Kestrel (ASP.Net Core web server) running locally on the dedicated nodes, and the dedicated server would communicate over local IP stack using HTTP REST, and within the Controllers within Kestrel I would interact with Proto.Actor. This would present a REST interface to the UE dev's, but everything would still be inherently message based. I would have the JSON messages deserailzie into the same POCO's needed for protoactor. I'm leaning toward this solution, but if somebody somewhere has a general purpose UE4 / proto.actor bridge, I'd be all up for checking it out!

2) Can I write a custom loader so that when the say a local Player actor spawns, it loads itself from the centralized global system? That way the latest globally persisted state is always available. Conversely, upon despawn the global system would be updated with the local data.

3) Does protoactor have the concept of a portable locality so that a Player actor instance can automatically "migrate" between datacenters so that it lives closer to the dedicated client who is currently accessing it? Or would this have to be built upon what's there?

4) How does protoactor provide HA / crash recovery? I'm used to Service Fabric Reliable Services whereby the data for the actor is replicated between active and secondary partitions, embracing the "let it crash" model and guaranteeing no data loss at the cost of write latency.

I'm sure I can think of more later, but these are the primary things I'm facing ATM...

SixFootRhino
@SixFootRhino
Regarding 4) I'm still confused about persistence and how it provides HA. Is the persistence spread across multiple nodes, active vs. secondary? If an Actor host crashes and the actor is created elsewhere, what process brings in the state that was persistend on the other machine? Again, the way SF handles this is the state is written to multiple (at least 3) replicas: the active and two secondary. Does Proto.Net have anything similar?
SixFootRhino
@SixFootRhino
@rogeralsing is protoactor.net dead?
Not much activity here or on github, just wondering if this is still being actively developed by anybody...
SixFootRhino
@SixFootRhino
Discussion moved to Git Issues...
Roman
@savchenkorv96
Good day. Can you please tell Proto.Actor supports https?
SixFootRhino
@SixFootRhino

Proto.Actor doesn't have a web server as part of it's solution. It speaks protobuf / gRPC.

There was a discussion about the concept of Proto.Http front-end quite some time ago here:

AsynkronIT/protoactor-dotnet#410

Roger's comment here makes a lot of sense to me:

"So for normal actors, just let Asp.NET be Asp.NET but we provide some easy way to unwind the HTTP Context + payload and transform into message + headers and pipe to a PID

Least amount of magic, fully configurable and works with other things.
Yet easy to use and integrate"

That totally makes sense to me, and if it was already built, we'd use it. We'll probably end up building this as part of the prototype, and if I can get approval to contribute it back, I will.

But yet, I'd love to see a nuget package out there with a piece of ASP.Net middleware that acts as a simple gateway to Proto.Actor.

Roman
@savchenkorv96
@SixFootRhino , Thank you very much.
Roman
@savchenkorv96
HI. Please tell me if I can create multiple remote connections within the same console? To simulate connecting multiple users?
I try to do a few tasks that creates a remote connection, but I get the exception "Proto.ProcessNameExistExaption".
Please tell me possible alternative options for connecting 10k users by remote ...
Roman
@savchenkorv96
P.s need to do load testing
Roman
@savchenkorv96

Good day. Can you please tell me if I use remote, then 1 and 2 nodes should have a static ip and an open port? Or I do not understand something?

It comes out to me ... There is a server that connects an n-number of clients to it and after that I send them a message. And when I add them to my dictionary. That pid local, but not external. Well, even if you send an external ip, then while the port is closed the client does not receive a message from the server.

Krishna Raman
@kraman
Hello, wondering if virtual actor logic is alpha code only on the go side or for c# also
Also, the meaning of alpha here... is it only because API might change? or are there known issues that need to be addressed
Krishna Raman
@kraman
Ive been trying to get understand how persistent actors and grains might work together but not having much luck. any suggestions or examples I can look at
Krishna Raman
@kraman
@rogeralsing @PotterDai ^. Thanks
kiwill
@kiwill
kevinreed8263
@kevinreed8263

may i ask some coding question?

why not directly assign variable tp to ref.t?

https://github.com/AsynkronIT/protoactor-go/blob/dev/actor/future.go#L28-L32

Noah Santschi-Cooney
@Strum355
Hey, im having an issue with remote actors. When an actor becomes available (for example if i kill the process) and i make an API request that would send a message to the unavailable actor, I end up in a loop of trying to connect the endpoint writer
it ends up in a constant loop of cluster.[REMOTE] - Started EndpointWriter, cluster.[REMOTE] - EndpointWriter connecting, cluster.[REMOTE] - EndpointWriter failed to connect, cluster.[REMOTE] - [ACTOR] Recovering
this happens even after the Member unavailable logs
Noah Santschi-Cooney
@Strum355
Ive got a workaround, opening PR tomorrow for discussion :)
Hopefully we can come up with a better solution together and maybe i can come up with a minimal repro
ben-foster-cko
@ben-foster-cko
Hi, what's the correct approach for preserving a child actors state on failure? If the child throws n number of times I'd like some internal state to be passed back to the parent.
Bryan Chan
@bryanpkc
@kevinreed8263 The atomic store prevents go test -race from complaining about a race condition.
Noah Santschi-Cooney
@Strum355
still more race conditions to be fixed with the queue, theres a PR waiting for that though
Vindil
@Vindil
Hi. I've implemented a testkit baseclass that offers similar functionality to the one in akka.net (getting messages, fishing for messages, testprobes etc). I've seen a few issues talking about the lack of a testkit so I was wondering if this would be of any interest? @rogeralsing
uvix
@uvix2k_twitter
hey, does anyone have an email contact at proto.actor?
Stefan Lauer
@Algorab
After update I see that Tell is moved from the actor to the context. What isn't clear for me what is the difference between Request and Send; And when I use Send() and when Request()?
anthonyhawes
@anthonyhawes
@Algorab Request includes the sender along with the message, but Send does not. This allows and actor to send a response back as part of processing a message
Stefan Lauer
@Algorab
@anthonyhawes Ok, thanks got it.
Andreas Vilinski
@vilinski
I understand that summer is a vacations time, but some issues and PRs are hanging around without answer. is there somebody who can look at? At least whether one should proceed or not
Иван Сердюк
@oceanfish81_twitter
Who is able to speak in Kiev, in October or November?
Noah Santschi-Cooney
@Strum355
@vilinski what PRs in particular
咚咔
@cupen
Hello guys. Is protoactor-go cluster ready for production environment? the document is here http://proto.actor/docs/grains
Stefan Lauer
@Algorab
I have a litte application with a couple of actors. I want to write some tests for it. In the documentation can’t find how to do it. So I look direkt in the proto.actor code, and get some hints. Is there some further examples / code where I can see how to check Message was Send / Received of an actor and look into the internal state?
Vindil
@Vindil
I have submitted a test kit in a pull request. Sounds like that would be helpful for you
Stefan Lauer
@Algorab
@Vindil I found your pull request in the protector-dotnet, is there something similar for protractor-go?
Vindil
@Vindil
Ah no it's only for dotnet unfortunately. Sorry
Noah Santschi-Cooney
@Strum355
@cupen we use a 2 node cluster in production and its working pretty good for us
咚咔
@cupen
@Strum355 OK , thank you for your response. I am using cluster in our test enviroment now. :smile:
ATRADER1000
@ATRADER1000
has anyone received a status message that an actor is "unavailable"? What can be done when an actor is "unavailable"?
Magnus Sydoff
@metscore
I consider myself a newbie when it comes to protoactor and I've only used it for about 10 months in a small server-client project. Nothing fancy, so I don't use multiple actors and all other fancy things etc. that I assume the framework was designed for. Due to this my question might be foolish beyond belief for some of the experts out there but I'll ask it anyway. :-)
My server is fairly dumb and just takes messages received in Task ReceiveAsync(IContext context) and forwards these to a driver that someone else wrote. This works very well and the client is happy since most calls are returned within a few milliseconds (up to a second) . However one of the calls from the client instructs the driver to measure something for more than 60 seconds and the driver is written in such a fashion that it does not return until the measurement is finalized. Obviously the client might like to cancel that ongoing process and here is where I run into problems.
I have a generic helper method public async Task<T> RequestAsync<T>(PID target, object message, TimeSpan timeout) performs something like
var context = new RootContext();
var response = await context.RequestAsync<T>(target, message, timeout);
which all of my calls are tunneled through.
However when the client tries (in another thread than originally called to start the measurement process) to cancel the ongoing process by calling the RequestAsync it gets stuck in the await context.RequestAsync call and this call never makes it to the server.
I've obviously done something wrong here , but if someone could shed some light or point me in a direction to get me out of the mess I'd be very grateful.
(I should probably mention that the targetPID is always the same. Maybe this is my problem ?)
King regards Magnus
anthonyhawes
@anthonyhawes
@ATRADER1000 I don't have experience with the cluster implementation, but the "unavailable" status means that an activator for a given kind cannot be located in the cluster. Have you registered all the kinds that are going to be requested?
anthonyhawes
@anthonyhawes
@metscore An actor will process messages one at a time. Unless you are running the driver as some kind of background task, the actor will wait until the driver has finished it's work before processing the next message
Magnus Sydoff
@metscore
@anthonyhawes Thank you for your answer! That seem reasonable. I will have to investigate on how to proceed. Secondary actor for cancelling messages or asking for the driver to be rewritten.... Well, we will have to see.