ID:133032
 
Currently the only way to consistently communicate between two servers where one has port forwarding and the other does not is to have the non-port-forwarded server repeatedly Export() to the open server, and have the open server respond with Topic's return value.

Is it easily possible to make it so the open server can respond through the connection at will? Or have the protected server set a time for the connection to be open or something?
Have you tried setting persist=1? All you should have to do is send a single world.Export() call from the non-port forwarded server to the port forwarded one, and with persist=1 there should be two-way communication.
In response to Android Data
Android Data wrote:
Have you tried setting persist=1? All you should have to do is send a single world.Export() call from the non-port forwarded server to the port forwarded one, and with persist=1 there should be two-way communication.

Thats not what persist does (or so I've been told)

Anyway, yes I've tried it, no it doesn't work. It merely keeps the OUTGOING connection open, but doesn't allow any way to communicate back through it.
AJX wrote:
Currently the only way to consistently communicate between two servers where one has port forwarding and the other does not is to have the non-port-forwarded server repeatedly Export() to the open server, and have the open server respond with Topic's return value.

Is it easily possible to make it so the open server can respond through the connection at will? Or have the protected server set a time for the connection to be open or something?

So if I understand you correctly, you have a situation where you have two worlds: world A behind a firewall and world B open to the public. You can't Export() from B to A because of the firewall, so you are having A constantly poll B for events. Is that right?

That's an interesting problem. With "persist" activated we do (in theory) have an open connection between the two, but there is nothing in the language to use it. We'd need to supply a connection id you could pass in place of the byond:// address. I think it's possible, but I'm not going to make any short-term promises. I'll look into it at least.
In response to Tom
So if I understand you correctly, you have a situation where you have two worlds: world A behind a firewall and world B open to the public. You can't Export() from B to A because of the firewall, so you are having A constantly poll B for events. Is that right?

Yes, A sends an Export() every tick and B is able to respond with Topic()'s return value.


That's an interesting problem. With "persist" activated we do (in theory) have an open connection between the two, but there is nothing in the language to use it. We'd need to supply a connection id you could pass in place of the byond:// address. I think it's possible, but I'm not going to make any short-term promises. I'll look into it at least.

Sweet. Thanky much. :)
It's something about port forwarding. People who use router usually have limited port range, to receive data from server (call Topic()) world must be hosted and accessable, in other words, person must be able to host games to receive data.
In response to Ripiz
Ripiz wrote:
It's something about port forwarding. People who use router usually have limited port range, to receive data from server (call Topic()) world must be hosted and accessable, in other words, person must be able to host games to receive data.

I'm aware of what restricts servers from recieving Export() messages... I'm also aware that if a non-port-forwarded person ASKS for the connection it should be allowed... Please read the post a bit more. I know what is causing this, I'm requesting a feature.
In response to AJX
I think there's nothing what can be done, person must configure his own router to allow ports, or you should allow people to change ports. Any Online game they play, they need specified ports, they allow/configure them, or it doesn't work.

On BYOND side it's all done right, just could be more efficient :)
In response to Ripiz
Ripiz wrote:
I think there's nothing what can be done, person must configure his own router to allow ports, or you should allow people to change ports.

But there is. If an outgoing connection exists to the server, it's impossible to send information back on it.

This is because port forwarding already occurs, but is invisible for you.

For example, you are requesting this webpage. But how is the web server supposed to send something back? It can do this because your router has opened up an unused port. Maybe it opened 1000. Maybe 27538. You wouldn't know. But if the web server sends something to that port, it'll arrive at your computer.

And what BYOND has done so far, is that once it has received a reply, to close the connection. And when the connection closes, this temporary port will be closed by the router as well.

So provided that the client initiates the connection to the server - since the server already has the necessary ports forwarded - all one has to do is keep the same connection open so that the port is available. You can then send as much information as you want back from the server to the client.
In response to Android Data
But to receive data on BYOND world it must be hosted, so port can't close randomly
In response to Ripiz
Ripiz wrote:
I think there's nothing what can be done [...]

I think you should read the topic before replying.
In response to Ripiz
Ripiz wrote:
But to receive data on BYOND world it must be hosted, so port can't close randomly

As Kaioken already said, you really should read posts before replying. Tom is already looking at this. Thank you for your... input? though...?