在JavaScript中查找LAN上的服务器

在JavaScript中查找LAN上的服务器,javascript,node.js,sockets,networking,web-applications,Javascript,Node.js,Sockets,Networking,Web Applications,TL;DR 在Javascript中,如何在LAN中的指定端口上查找所有运行指定程序的服务器的IP 背景 我正在node.js中编写一个服务器,它应该将用户浏览器作为控制器连接到运行游戏的公共设备。浏览器正在运行一个基于html和Javascript的web应用程序。该连接基于socket.io 我希望web应用程序能够在LAN中找到此服务器的所有可用实例,以便创建一个服务器列表供用户选择 有没有一种方法可以让本地网络上的web应用程序在Javascript中发现服务器,在这种情况下:如何 想法

TL;DR

在Javascript中,如何在LAN中的指定端口上查找所有运行指定程序的服务器的IP

背景

我正在node.js中编写一个服务器,它应该将用户浏览器作为控制器连接到运行游戏的公共设备。浏览器正在运行一个基于html和Javascript的web应用程序。该连接基于socket.io

我希望web应用程序能够在LAN中找到此服务器的所有可用实例,以便创建一个服务器列表供用户选择

有没有一种方法可以让本地网络上的web应用程序在Javascript中发现服务器,在这种情况下:如何

想法

  • 让服务器将其IP广播到LAN上的所有设备,并让web应用侦听这些消息(不知道在客户端没有节点的情况下如何执行此操作)
  • 连接到网络上的每个IP,查看连接是否成功。(似乎不可行)
  • 扫描网络上的每个IP,并仅连接到端口打开的IP。(同样,不知道如何在客户端上没有节点的情况下执行此操作,并且也不可行。)
编辑


服务器应该是可移植的,可以独立工作,没有任何中央系统对其进行备份或为客户端提供匹配。它是一个仅限于局域网的服务器,即使没有互联网接入也应该可以工作。

您没有办法做到这一点。很抱歉因为在客户端JavaScript上没有UDP的暴露,所以广播是不可能的。任何大规模扫描的尝试都会很快在网络监控软件上引起注意。您必须使用已知地址。

您没有办法这样做。很抱歉因为在客户端JavaScript上没有UDP的暴露,所以广播是不可能的。任何大规模扫描的尝试都会很快在网络监控软件上引起注意。你必须使用一个已知的地址。

你为什么不创建一个服务器来监听所有客户端,并将客户端列表传输到所有其他客户端,比如bittorrent协议。或者你可以使用gcm浏览器。我真的不认为这会改变什么,因为你仍然需要首先找到服务器?或者你的意思是像所有会话的中央服务器那样,找出谁在同一个网络上并连接这些会话?是的,bit torrent协议中总是有一个中央服务器。那么,恐怕它不适合我的需要。这是一个便携式多人服务器。我会更新我的问题。嘿,菲利克斯,你找到一个有效的解决方案了吗?与其这么做,不如做一个服务器,监听所有客户端,并将客户端列表传输到所有其他客户端,比如bittorrent协议。或者你可以使用gcm浏览器。我真的不认为这会改变什么,因为你仍然需要首先找到服务器?或者你的意思是像所有会话的中央服务器那样,找出谁在同一个网络上并连接这些会话?是的,bit torrent协议中总是有一个中央服务器。那么,恐怕它不适合我的需要。这是一个便携式多人服务器。我会更新我的问题。嘿,菲利克斯,你找到有效的解决方案了吗?好吧,那太令人沮丧了。为了以防万一,我会把这个问题再讨论一段时间。好吧,那太令人沮丧了。不过,我会把这个问题再讨论一会儿,以防万一。