XSockets / WebSockets 无法从主机以外的其他机器访问
Posted
技术标签:
【中文标题】XSockets / WebSockets 无法从主机以外的其他机器访问【英文标题】:XSockets / WebSockets not accessible from other machine than the hosting one 【发布时间】:2014-06-24 23:02:07 【问题描述】:我正在使用 WebSockets 开发一个站点,并且我正在使用 XSockets.NET 来实现整个 WebSockets 服务器。
此外,我可以从开发机器中访问 XSocket.NET 控制器,但无法从另一台机器访问它。
顺便说一句,这不是 DNS 问题,因为网站本身可以从任何其他机器上浏览:这是使用 WebSockets 的东西。
目前我在 Firebug 中收到以下错误:Firefox 无法建立与服务器的连接 [...],其中服务器是端口 7532 上的整个主机名。 p>
我可以提供我如何配置和启动整个 WebSockets 服务器的示例代码:
IXSocketServerContainer server = Composable.GetExport<IXSocketServerContainer>();
List<IConfigurationSetting> serverConfig = new List<IConfigurationSetting>();
serverConfig.Add(new ConfigurationSetting("ws://[host name]:7532", new HashSet<string> "*" ));
server.StartServers(configurationSettings: serverConfig);
此外,整个 XSockets.NET 托管在 Windows 服务中,我正在使用开箱即用的 XSockets.NET javascript API 连接到 XSocket.NET 控制器:
// This will work as expected when I open my site from the development machine
var conn = new XSockets.WebSocket("ws://[host name]:7352/[controller name]");
conn.on(XSockets.Events.open, function (clientInfo)
conn.subscribe("[Action name]", function (message)
);
);
什么会阻止其他机器连接到整个 WebSocket 服务器?我错过了什么?
【问题讨论】:
【参考方案1】:我已经解决了,这是最小的变化。
XSockets.NET 似乎需要配置 WebSocket 来监听 any IP 和 any 主机。也就是说,整个主机应该是0.0.0.0:7532
。
令人惊讶的是,I've found the solution in a comment on this XSockets.NET documentation page (Creating custom configuration ...):
主播: 行。因此,我对上面提到的问题进行了更新。一个可能的 解决方案,反正对我来说。
在 CustomConfigLoader 中,我将添加 ip 地址为 0.0.0.0,这意味着我的 XSockets 服务器将从任何 ip 地址监听。因此,代码将如下所示: var url="ws://0.0.0.0:4502/";
在 Javascript 中,我将使用 window.location.hostname,它指向应用程序的主机,本质上是服务器所知道的 客户端,我正在使用我的 XSockets。
第二步已经是我在代码中所做的,首先是成功的原因(在我的例子中,我没有使用 CustomConfigLoader,但我只是添加了一个 ConfigurationSetting
和 0.0.0.0:7352
作为主机 IP/主机名)。
【讨论】:
【参考方案2】:如果您运行 TCP 扫描,您真的能看到从外部打开的端口吗?
您是否尝试过使用wss://
(安全)连接?您的服务或托管服务提供商可能有一个透明的proxy that is not websocket friendly。确保安全可避免代理出现问题。
XSocket.net 最新版本中有no documentation for SSL/TLS,但很可能是similar to the older version。
【讨论】:
相信你已经猜到很多了!我没有在外部公司托管它。开发机器是一个虚拟机,它在那里工作,如果我尝试从主机或我的平板电脑访问该站点,则整个 WebSocket 都无法访问。我试过telnet [host] [port]
,但它在VM和外部机器上都不起作用。
另外,我在虚拟机和主机上都禁用了 Windows 防火墙。以上是关于XSockets / WebSockets 无法从主机以外的其他机器访问的主要内容,如果未能解决你的问题,请参考以下文章
C/C++ [ Websockets ] 无法解析从 <sys/socket.h> 调用接受方法
Nuxtjs + Laravel Echo + Laravel Passport + Laravel WebSockets 无法从私人/状态通道获取事件
构建二进制套接字 .NET 服务器:自定义 vs. SignalR vs XSockets vs WebSocket4Net?