我一直在研究PHP Laravel應用程序,我一直在使用Redis和Node.JS連接到WebSocket。無法連接到Heroku上的Websockets
所以爲了實現這一點,我一直試圖在端口3000上運行節點服務器,但是heroku是動態分配端口的。
因此,我無法在客戶端獲得正確的端口號。
我該怎麼做才能解決它?
客戶端配置:
var socket = io.connect('http://app-around.herokuapp.com:3000');
Note: Host Name is app-around.herokuapp.com
後端運行正常,如下圖所示:
C:\xampp\htdocs\around-us>heroku run node socket.jsRunning node
socket.js on app-around... up, run.5567 (Free)
// Randomly generated port number it is..
Message Recieved: {"event":"App\\Events\\NewMessage","data":{"data":
{"message":"Question Posted"}},"socket":null}
所以越來越在服務器端生成的事件,但我不能接受他們在客戶端。試了幾件事情上的前端,但他們沒有工作:
Eg: 1) var socket = io.connect();
2) var socket = io.connect(window.location.hostname);
節點服務器代碼:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var Redis = require('ioredis');
var redis = require('redis').createClient(process.env.REDIS_URL);
redis.subscribe('test-channel', function(err, count) {
});
redis.on('message', function(channel, message) {
console.log('Message Recieved: ' + message);
message = JSON.parse(message);
io.emit(channel + ':' + message.event, message.data);
var temp = "data";
io.emit("time", temp);
});
var port = process.env.PORT || 3000;
http.listen(port, function(){
console.log('Listening on Port 23000');
});
JS代碼,以便在前端側角應用:
var socket = io();
socket.on("time",function(data){
alert(data);
});
當你遠程連接到Heroku時,請刪除端口號 - 網絡路由層將負責轉發HTTP(端口80)和HTTPS(端口443)到動態分配的端口。 – Myst