我正在尝试使用 redis 和 socket.io 在 heroku 上设置一个聊天应用程序,但我无法弄清楚我应该在客户端放置什么 uri。
我尝试过的所有 uri,给我一个 404、name_not_resolved 或超时错误。
我有一个 heroku 应用程序,它正在运行一个节点.js构建包,它所做的只是运行套接字.js文件。
我还有另一个php heroku应用程序,它具有带有redis广播的laravel后端和一个vue前端。
广播的设置是,当有人发布帖子或发出 GET 请求"/"时,事件将分别在"新后频道"和"用户输入的聊天频道"上触发。
我可以进入套接字.js应用程序的 bash 并运行"节点套接字.js"。我可以看到它连接到heroku的redis addon Amazon服务器并接收广播。
我还可以进入第二个应用程序的heroku的redis-cli,进入监控模式,并看到广播正在按预期拾取。
这一切都在流浪家园虚拟服务器中工作,但在 heroku 上不起作用。
var socket = io('redis://h:oaisuhaosiufhasodiufh@ec2-99-81-167-43.eu-west-1.compute.amazonaws.com:6639');
(也许您还知道如何在我的第一个应用程序上自动运行"节点套接字.js"命令,这样我就不必进入 heroku 的 bash 并手动运行它?
alland all..我终于在 Vultr.com 上得到了一个VPS..并遇到了同样的问题..
所以答案是
- 如果你有HTTPS完成..那么你需要把你所在的域。
io('https://'+ window.location.hostname, {reconnect: true});
- 您需要导航到nginx配置文件并对其进行编辑。我已经在站点可用部分设置了我的。
/etc/nginx/sites-available/yourDomainOrIp.conf
3. 您将在配置文件中包含这些"位置"部分。制作一个新的。我把我的放在其他人之前。
location /socket.io/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass "http://localhost:3000/socket.io/";
}
本节意味着如果您访问某些内容/socket.io/,它将被重定向到 localhost 端口 3000。 在本地主机端口 3000 上,我有 nodejs 应用程序侦听
var server = require('http').Server();
var io = require('socket.io')(server);
var Redis = require('ioredis');
var redisNewMessage = new Redis();
var redisUserEntered = new Redis();
server.listen(3000);
所以。。我仍然不知道如何完全回答这个问题..但基本上:
在该 io() 中,您需要传递一个地址,该地址最终将"/socket.io/polling%something&something"传递给本地主机和 NodeJS 应用程序所在的服务器的端口。
该亚马逊链接保留在nodejs新的Redis ()..Socket.io 必须连接到nodejs应用程序文件,然后一切都应该可以工作。