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,但我只是添加了一个 ConfigurationSetting0.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 无法从主机以外的其他机器访问的主要内容,如果未能解决你的问题,请参考以下文章

websockets无法从Windows 7客户端工作

C/C++ [ Websockets ] 无法解析从 <sys/socket.h> 调用接受方法

Nuxtjs + Laravel Echo + Laravel Passport + Laravel WebSockets 无法从私人/状态通道获取事件

构建二进制套接字 .NET 服务器:自定义 vs. SignalR vs XSockets vs WebSocket4Net?

代理阻止 websockets?如何绕道

无法与在 EC2 上运行的 Laravel Websockets 建立连接