【发布时间】:2017-09-10 20:51:56
【问题描述】:
我一直在开发一个 PHP Laravel 应用程序,我一直在使用 Redis 和 Node.JS 来连接到 WebSocket。
所以为了实现这一点,我一直在尝试在端口 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');
});
前端 Angular 应用的 JS 代码:
var socket = io();
socket.on("time",function(data){
alert(data);
});
【问题讨论】:
-
在远程连接到 Heroku 时删除端口号 - 网络路由层会注意将 HTTP(端口 80)和 HTTPS(端口 443)转发到动态分配的端口。
标签: angularjs node.js heroku laravel-5 websocket