【问题标题】:How to run a socket and a websocket server on the same port?如何在同一端口上运行套接字和 websocket 服务器?
【发布时间】:2016-08-14 13:59:31
【问题描述】:

我在一个服务器上工作,它正在监听端口 80

我想让本机和 websocket 客户端都连接到我的服务器。

仅当websockify 在不同的端口运行并将流量转发到套接字服务器时才有效。

很遗憾,websockify 没有很好的文档记录,也没有可用的教程。

如果我只想创建一个服务器,它只监听一个端口,并且接受 websocket 和本地 TCP 套接字,我应该从哪里开始?

【问题讨论】:

  • 同一端口同一时间?
  • 是的,同一个端口,同一个时间

标签: c++ sockets websocket listen websockify


【解决方案1】:

如果您的服务器正在侦听端口 80 上的连接,它是否在使用 http?因为如果不是,请不要监听端口 80:端口 80 已被确立为承载 http 流量。

下一步 - ipaddress 和端口一起是端点的唯一标识符。如果远程客户端在端口 80 上连接到您的服务器,除了目标 ip 和端口之外,网络层没有其他信息可以确定哪个应用程序侦听端口 80,值得数据包。鉴于提供多个 IP 地址非常困难——通过 NAT 不可能——真正可用于将数据包路由到正确侦听器的唯一信息是端口。所以你不能让两个应用程序监听同一个端口。

最后,在初始 HTTP 协商之后,websocket 的行为类似于本机套接字。这意味着,您可以不使用websocksify,而是教您的本机服务器应用程序检测 Websocket 客户端的连接尝试,并可选择在进入“本机”模式之前执行初始协商。

Writing Websocket Servers 简要介绍了您的本机服务器需要实现的功能。

【讨论】:

  • 我使用的是 80 端口,因为在某些网络上,除 80 和 443 以外的端口都被禁用了,所以那些客户端无法连接到服务器
  • 对于无知的系统管理员没有真正的防御:/
【解决方案2】:

如果你看一下WebSocket,你会发现它是一个基于 TCP 层的协议。因此,您的服务器套接字只能绑定一次到端口 80,这取决于您是使用普通 TCP、WebSocket 还是您的自定义协议。从 WebSocket 切换到 TCP,反之亦然。

【讨论】:

  • 不是我的反对意见,但是是的,您可以切换...神奇的是带有升级的 HTTP 连接标头(记录在您引用的链接中),它允许将 TCP 从 HTTP 切换到 WebSocket...另请参阅 Sec-WebSocket-Version...
  • 使用 HTP 由您决定。 WebSockets 是 HTTP 的子协议。
猜你喜欢
  • 2016-06-07
  • 2018-01-30
  • 2015-09-23
  • 2015-05-28
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
  • 2015-06-26
  • 2013-12-18
相关资源
最近更新 更多