我知道,这是一个备受讨论的话题,但我希望有一些创新的方法,或者一些我没有遇到的方法。本质上,我需要一种在两台客户端机器上运行的套接字之间建立对等连接的方法。当然,主要问题是防火墙(
which should be doable
)以及端口转发的需要。
现在,我熟悉UPNP之类的,我知道你
can
(有时,无论如何)为端口转发设置路由器,但对我来说,这似乎是一个混乱的实现,更不用说不可靠了,因为用户可以切换路由器,甚至有一个没有UPNP或已禁用的路由器。
如果需要的话,我愿意(尽管有些不情愿)加入一个中间服务器以方便连接,但除了简单地从一个流复制到另一个流之外(数字相当于将两个电话粘在一起,其中一个的扬声器面对另一个的麦克风,反之亦然),但正如这个类比所希望的那样,这样做似乎不是最好的方法。也许有一种方法可以将两个独立连接的、不同的套接字相互连接?
我见过
lots
和
lots
许多问题或多或少地说明了我想要什么,我意识到将其标记为其中一些问题的复制品的诱惑,但我主要想知道应用程序如何
TeamViewer
或者Skype(如果我没记错的话,我认为Skype可能已经改为通过服务器进行所有通信,但至少MSN Messenger以前是P2P)。
所以,问题是:
我如何设置一个套接字,无论是否通过使用中间服务器,该套接字将从一个客户端机器连接到另一个客户端,而不必使用UPNP或类似的不可靠端口转发技术?
我在路上做了一些笔记:
-
至少,TeamViewer确实为自己创建了一些防火墙例外。我对此没有异议。但如果它采取将两部手机放在一起的方式,为什么会需要这些呢?默认情况下(通常)批准出站请求。
-
我听说过HTML5和WebSocket允许浏览器间聊天,但这是如何实现的?我看过一些关于这方面的帖子
WebRTC
,但类似的技术是否可以在浏览器之外使用?我认为是这样,因为一般来说,网络对此类行为的限制性更强。
为了记录在案,我确实可以完全控制客户端和任何必要的服务器,所以我可以做任何事情。
但是
我非常感谢不必在发起客户端上做一些事情,因为我希望看到Internet Explorer在那个地方发挥作用。基本上我想写一个P2P代理,所以我当然
能够
做一些更高级的事情,编写我自己的套接字,在它们之间进行对话,并显示出来(它不一定工作得很好,只要足以工作),但如果IE可以直接连接,那就太棒了。
让我知道,我知道这也比我们在这里看到的要广泛一些,它可能更适合程序员,但我尽量保持它的具体性。