0

我正在尝试使用 redis 和 socket.io 在 heroku 上设置一个聊天应用程序,但我无法弄清楚我应该在客户端放置什么 uri。

我尝试过的所有 uri,给我一个 404、name_not_resolved 或超时错误。


我有一个运行 node.js buildpack 的 heroku 应用程序,它所做的只是运行 socket.js 文件。

我还有另一个 php heroku 应用程序,它有 laravel 后端和 redis 广播和一个 vue 前端。


广播设置为当有人发布帖子或发出 '/' 的 GET 请求时,会分别在 'new-post-channell' 和 'user-entered-chat-c​​hannel' 上触发一个事件。


我可以进入 socket.js 应用程序的 bash 并运行“node socket.js”。我可以看到它连接到 heroku 的 redis 插件亚马逊服务器并接收广播。

我还可以进入第二个应用程序的 heroku 的 redis-cli,进入监控模式,并查看广播是否按预期接收。


这一切都在一个流浪的宅基地虚拟服务器上工作,但在 heroku 上却没有。


var socket = io('redis://h:oaisuhaosiufhasodiufh@ec2-99-81-167-43.eu-west-1.compute.amazonaws.com:6639');

(也许您还知道如何在我的第一个应用程序上自动运行“node socket.js”命令,这样我就不必进入 heroku 的 bash 并手动运行它?)

4

1 回答 1

0

总而言之..我终于在Vultr.com上获得了一个VPS ..遇到了同样的问题..

所以答案是

  1. 如果您已完成 https .. 那么您需要输入您所在的域。
io('https://'+ window.location.hostname, {reconnect: true});
  1. 您需要导航到您的 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);

Soo..我仍然不知道如何完全回答这个问题..但基本上:

在那个 io() 中,您需要传递一个地址,该地址最终将“/socket.io/polling%something&something”传递给 localhost 和 nodejs 应用程序所在的服务器端口。

该亚马逊链接保留在 nodejs new Redis () 中。Socket.io 必须连接到 nodejs 应用程序文件,然后它应该可以工作。

于 2019-05-12T18:15:16.203 回答