I just discovered all of this STUN/TURN stuff after having been working on my multiplayer project, testing my build just to see all this connectivity issue, and discovering the complexity of it all-having thought that the breakthrough it was doing was something I'd get to bring to my completed project.
(Understandably that's not reasonable to be included too considering what I've read, but there's no remotely clear solution to this, and it wasn't evident at all to me this was going to become a problem when I was working on the game in the editor and testing in the browser, etc).
I've done a lot of searching trying to find solutions, and there are some references directly to Construct in a few posts about TURN, but the problem is those 'solutions' are far too complex when approaching this engine from a visual designer perspective. I have no idea how to get a virtual server etc setup and run/build all the programs and command lines or what any of the open source TURN libraries need, just to get the few pieces of data I need to add to the ICE server input box.
I'm currently using the free developer account available at xirsys.com to try and get things working in my built project via the information generated from a php script, however the speed fluctuates dramatically to the point where it misses important things like when the peer has connected sometimes, etc. Additionally it doesn't connect at all when in firefox for some reason, even though the remote preview in construct does.
So I'd really appreciate some kind of understanding of how the internal TURN works, or what may be missing/an alternative method, etc.
(Note: 'use colyseus instead', etc, isn't a solution. I'm a visual programmer and I can't break into that stuff, and the internal multiplayer's functions/structure has just what I need for my project. The issue is all this TURN/ICE stuff).
TURN is a different technology and not part of Construct - it's a separate Internet standard that happens to integrate with WebRTC. There is no "internal TURN" in Construct, other than the fact we host our own TURN server for Remote Preview. By default multiplayer does not use any TURN service. For the Remote Preview TURN server we run coturn on a cloud Linux server, so you could try that. If you have issues with third-party services like xirsys it would be best to take it up with them.
Thank you very much for the response and additional information.
I understand now that by default multiplayer does not use any TURN service, the issue was that I was using multiple instances of the Remove Preview to test/debug multiplayer during development-leading me to believe it would function like that upon export. I had no idea that was an upcoming issue.
I got a response back from them mentioning 'the rfc5766 standard' that you might not be using, possibly something to do with how ICE interprets the data? Sorry I can't be more specific with my limited understanding of all this. If that means anything to you that might add more context to this situation I'd really appreciate any more information along those lines I might be able to take to them for further response/discussion.
All I know is that your implementation seemed to work more consistently than there's, but they have no idea how it could be a problem and based on their history they should know what they are doing too.
Appreciate you letting me know how you use TURN for the remote preview. The issue being though, I have absolutely no idea how to start with that. What specific kind of cloud linux server would I need to purchase, would I need to purchase ones at multiple locations and how would I interpret/get the data safely from said server into a string value I can add to the ICE input, etc. Not to mention the countless specs/words/numbers that are alien to me on that page or whether I then have to workout their API and code more too. It sounds like a solution, and obviously it works awesomely for Remote Preview, but that doesn't look at all accessible to a non-programmer.
It's not controlled by Construct at all, the connection is managed by the browser. All Construct can do is tell it which servers are available - other than that Construct itself has nothing to do with the connection. If their service doesn't work with major browsers like Chrome then I don't know what they're up to...
In Chrome it does connect, and the debug apk it connects, it's just weirdly not connecting in firefox (even though your TURN solution does).
Sorry, even though I understand TURN hasn't got anything to do with Construct, from an outside perspective when your solution works and there's doesn't when the situation should be the same, without a better understanding of how that connection and redirect is made behind the scenes it's hard to know at what stage does TURN take over and where the problem starts.
So really appreciate your time taken to respond, I guess hopefully the only other service I found might garner better results even if there's no free transfer threshold with theirs. If the results are the same though I might need to ask more about the linux/coturn stuff.
Develop games in your browser. Powerful, performant & highly capable.
Could I please ask, how is it you are getting the TURN server functioning?
I've spent more than the entire day trying to search through all the alternatives I could. Though I've reached the point of having a Linux server via AWS and somehow managed to get Coturn installed, the disjointed 'guides' I've managed to find are all skipping steps and I can't quite dissect the mass of readme's and more complex language (for me) in the turnserver documentation.
There's all these if's and but's everywhere, and no context given to the usernames/passwords in the proper method to generate the key for them or whether a realm is something you can just make up or if it needs to be added to the mysql database/just the turnuserdb.conf, or if the mysql database even exists because they all seem to skip different parts that makes it impossible to even join them together. Not to mention how many different ways and letters etc they use to 'activate' TURN. And I'm nowhere closer to imagining how to get this information into Construct 3 at the end of it out from the console, with the different udp/tcp etc desired.
I also noted daemon services and turnserver.conf that's recommended to keep it running consistently? Alternatively there was another thing I saw but regrettably lost in my countless tabs and can't see in my history. Basically something that pushes it back online the second it's lost.
You no doubt have a more complex final solution for your needs, but I'd really really appreciate any extra details that could help me fill in the holes I need to get this running.