-
Notifications
You must be signed in to change notification settings - Fork 119
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Put the mineflayer bot in a worker #64
Comments
Makes sense.
Maybe we could do a bot-like api that would actually use messages ?
So from the user point of view, he's using the same API as now.
…On Sun, Mar 7, 2021, 02:53 Karang ***@***.***> wrote:
After doing some profiling, I've seen that the main thread spend too much
time in the network. This is what is causing the drop of fps and stuttering.
This is best shown when loading chunks but even sending the position
packet every tick is affecting the fps.
The only way to fix it is to put the websocket connection in a worker
thread and the easiest way to do it is to put the bot in it.
This will require a big refactor and a change of project design because
the bot functions would have to be accessed through messages.
This should be done ASAP (because of the project design change).
Alternative design is to do like prismarine-viewer or web-minecraft and
have the bot on the server side, but that raise the same design issues
(communicating with server instead of the worker) and is less portable, so
I think the worker is the best solution.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
<#64>, or
unsubscribe
<https://github.com/notifications/unsubscribe-auth/AAR437TFFHKLAIJ4EWRZGZDTCLMA7ANCNFSM4YXKPVAQ>
.
|
Looking at the code, it's mostly about doing that for pworld. Putting most of the remaining state will help on this. |
Yes the first steps of the work are in pworld. We also need a modification of pviewer to allow this kind of data transfer: Alternatively we could also do: That would require less modifications put will do 1 extra transfer (shouldn't cost much as arraybuffer can be transfered instead of copied). Reproducing the mineflayer api with messages would be painful to maintain so we have to find a way to automate this. Do you have some ideas ? |
That's probably not needed anymore as we fixed the issue with the network. |
yeah it's lower priority at least let's let it open and we'll see if we think we need it later |
seems webmc does that https://github.com/michaljaz/web-minecraft/blob/threejs-javascript/src/scripts/proxy/Proxy.worker.js maybe we should still do this issue |
Do we have evidences that the mineflayer bot is causing some issues ? Having it in a worker would be way less convenient for everything so i don't think we should do it unless we have to. |
I do see that fps are lower at the beginning when mineflayer is highly active I agree about convenience. If we were to do it, it should be made as convenient as currently by using js proxy (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy) and some looping over all methods/attributes , so the fake bot object behaves the same as the normal one. Until we have a solution that is as convenient as the current thing, or that we are forced to do it due to performance, let's keep things like this |
After doing some profiling, I've seen that the main thread spend too much time in the network. This is what is causing the drop of fps and stuttering.
This is best shown when loading chunks but even sending the position packet every tick is affecting the fps.
The only way to fix it is to put the websocket connection in a worker thread and the easiest way to do it is to put the bot in it.
This will require a big refactor and a change of project design because the bot functions would have to be accessed through messages.
This should be done ASAP (because of the project design change).
Alternative design is to do like prismarine-viewer or web-minecraft and have the bot on the server side, but that raise the same design issues (communicating with server instead of the worker) and is less portable, so I think the worker is the best solution.
The text was updated successfully, but these errors were encountered: