2

我正在使用 WebSockets 开发一个站点,并且我正在使用 XSockets.NET 来实现整个 WebSockets 服务器。

此外,我能够从开发机器中访问 XSocket.NET 控制器,但我无法从另一台机器访问它。

顺便说一句,这不是 DNS 问题,因为网站本身可以从任何其他机器上浏览:它与 WebSockets 相关。

目前我在 Firebug 中收到以下错误:Firefox 无法建立与服务器 [...] 的连接,其中服务器是端口 7532 上的整个主机名。

我可以提供我如何配置和启动整个 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 服务器?我错过了什么?

4

2 回答 2

2

我已经解决了,这是最小的变化。

似乎 XSockets.NET 需要配置 WebSocket 来监听任何IP 和任何主机。也就是说,整个主机应该是0.0.0.0:7532.

令人惊讶的是,我在此 XSockets.NET 文档页面 (Creating custom configuration ...) 的评论中找到了解决方案

VJ:好的。因此,我对上面提到的问题进行了更新。一个可能的解决方案,无论如何它对我来说都是如此。

  1. 在 CustomConfigLoader 中,我将添加 IP 地址为 0.0.0.0,这意味着我的 XSockets 服务器将从任何 IP 地址进行侦听。因此,代码如下所示: var url="ws://0.0.0.0:4502/";

  2. 在 Javascript 中,我将使用 window.location.hostname,它指向应用程序的主机,本质上是客户端知道的服务器,我正在使用我的 XSockets。

第二步已经是我在代码中所做的,首先是成功的原因(在我的情况下,我没有使用 CustomConfigLoader,但我只是添加了一个ConfigurationSettingwith0.0.0.0:7352作为主机 IP/主机名)。

于 2014-06-25T07:26:02.217 回答
1

如果您运行 TCP 扫描,您真的能看到从外部打开的端口吗?

您是否尝试过使用wss://(安全)连接?您的服务或托管服务提供商可能有一个对 websocket 不友好的透明代理。确保安全可以避免代理出现问题。

最新版本的 XSocket.net中没有 SSL/TLS的文档,但可能与旧版本非常相似

于 2014-06-24T23:21:55.610 回答