【问题标题】:Sails socket io connecting to a different url than the one passed inSails 套接字 io 连接到与传入的不同的 url
【发布时间】:2016-04-01 05:49:23
【问题描述】:

在生产中,当我尝试从客户端 url 'https://something.com/' 连接到我的 socket 客户端时,我得到一个 404

https://something.com/socket.io/?__sails_io_sdk_version=0.13…owser&__sails_io_sdk_language=javascript&EIO=3&transport=polling&t=LFGJG5g 404 (Not Found)

当我在本地机器上的sails 中建立套接字连接时,它可以工作。

我的本地配置。

客户主机

http://localhost:8080/

API 主机

http://localhost:1337/

HTML

<script src="sails.io.js" autoConnect="false"></script>

JS

connect() {
    this.socket = io.sails.connect('http://localhost:1337');// Works Fine
}

我的生产配置

客户主机

https://something.com/ 

API 主机

https://something.com/api/

JS

connect() {
    this.socket = io.sails.connect('https://something.com/api/');// Does not work
}

我确保将 autoConnect 设置为 false,并且唯一的连接是通过 connect() 函数进行的。似乎无论我将什么字符串传递给 connect() 函数(仅在生产中),它都假定客户端 url (https://something.com/) 并从生产 url (https://something.com/api/) 中删除后缀 /api/。

【问题讨论】:

  • 您知道https://something.com/api/https://something.com 是完全相同的主机吗? /api 是路径的一部分,而不是主机定义。因此,无论哪种情况,您都在尝试连接到主机https://something.com。如果您认为自己在此处连接到两个单独的服务器进程,那么在您的生产环境中并非如此。
  • 这里缺少我的术语。 /api/ 通过 nginx 映射到节点服务器。我的 api 通过 /api/ 路径提供服务,如果它具有相同的主机但不同的路径,你会建议我如何连接到该路径上的套接字。感谢您的帮助。
  • 您必须弄清楚如何在 socket.io 中使用自定义路径,因为默认的 socket.io 连接代码可能会去掉 /api 前缀,而只是尝试连接到主机独自走自己的路。 socket.io 的自定义路径前缀可能是可能的,但我不知道我是怎么想的。
  • 您可以将path 选项传递给io.connect() 选项哈希。我只发现它提到了in migration guide。应该是一个起点。

标签: node.js sockets socket.io sails.js sails.io.js


【解决方案1】:

<script src="/js/dependencies/sails.io.js"></script>
<script type="text/javascript">
  io.sails.url = 'https://myapp.com'; // or where you want
</script>

文档可以在这里找到:http://sailsjs.com/documentation/reference/web-sockets/socket-client#?programmatic-configuration-using-iosails

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    • 2021-09-14
    • 2016-01-03
    • 1970-01-01
    相关资源
    最近更新 更多