Hey there I've trying to sort this out for a while now and hoping someone can help.
The Goal: To have multiple HTML5 players (hosted on itch.io) connecting to a single windows app as the server/host player. This will be an assymetrical game, and this is totally an experimental thing, so im trying to avoid using an external server for now...
What I Have So Far: I have the websocket server running on win10 and an HTML5 client running on itch.io. They successfully connect when I access itch from the same local machine that is running the server and I use ws://127.0.0.1:4088 (localhost) as the url.
Using the HTML build on Itch.io, it will not connect from any other device on the same LAN, nor will it connect from the internet (had a friend try with my public IP).
Also: I have opened the port (4088, arbitrarily chosen) on my modem AND firewall. I have tested a windows and linux build of the client app and both are succesfully able to connect over LAN and via the internet (friend tested).
Final Thoughts: All this leads me to believe the problem lies with the HTML export... maybe I missed something specific to HTML5? Does my setup just not work in HTML5 exports? I'm new to networking so hopefully I'm just missing something obvious!
Attached my code, hope you can help :)
Client.gd
extends Node
# manually enter url in a textedit node
# triggers connection with a button press
var url
var network
var port = 4088
var max_players = 1000
func _ready():
network = WebSocketClient.new()
network.connect("connection_failed", self, "OnConnectionFailed")
network.connect("connection_succeeded", self, "OnConnectionSucceeded")
network.connect("connection_error", self, "OnConnectionError")
func _process(delta):
if (network.get_connection_status() == NetworkedMultiplayerPeer.CONNECTION_CONNECTED || network.get_connection_status() == NetworkedMultiplayerPeer.CONNECTION_CONNECTING):
network.poll()
func _on_Button_pressed():
print("Client Initialising...")
url = $UI/TextEdit.text
ConnectToServer()
func ConnectToServer():
var error = network.connect_to_url(url, PoolStringArray(), true)
get_tree().set_network_peer(network)
print("Client Initialised")
func OnConnectionFailed(playerID):
print("Failed to connect")
$UI/Label.text = "Failed to connect"
func OnConnectionError():
$UI/Label.text = "Connection Error"
func OnConnectionSucceeded(playerID):
print("Succesfully connected")
$UI/Label.text = "Successfully connected"
Server.gd
extends Node
var network = WebSocketServer.new()
var port = 4088
var max_players = 1000
func _ready():
print("Server Initialising...")
StartServer()
func _process(delta):
if network.is_listening():
network.poll()
func StartServer():
network.set_bind_ip("*")
network.listen(port, PoolStringArray(), true)
get_tree().set_network_peer(network)
network.connect("peer_connected", self, "PeerConnected")
network.connect("peer_disconnected", self, "PeerDisconnected")
print("Server Initialised")
func PeerConnected(playerID):
print("User " + str(playerID) + " Connected")
func PeerDisconnected(playerID):
print("User " + str(playerID) + " Disconnected")