【发布时间】: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