【问题标题】:NodeJs not able to listen to port on digital ocean UbuntuNodeJs 无法在数字海洋 Ubuntu 上监听端口
【发布时间】:2016-03-16 11:32:22
【问题描述】:

我正在尝试在我的服务器上实现消息传递。这是 Ubuntu 14.04/Nginx

我已经安装了

1.nodejs 
2.Redis
3.laravel 

一切顺利

当我运行命令时

node -v

它给了我节点的版本

在我的控制器中,我的代码如下所示

public function sendMessage(){

        $redis = LRedis::connection();
        $redis->publish('message', 'Sending Message to Port');
        return redirect('writemessage');
    }

而我的server.js代码是这样的

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var redis = require('redis');

server.listen(8890);
io.on('connection', function (socket) {

  console.log("new client connected");
  var redisClient = redis.createClient();
  redisClient.subscribe('message');

  redisClient.on("message", function(channel, message) {
    console.log("mew message in queue "+ message + "channel");
    socket.emit(channel, message);
  });

  socket.on('disconnect', function() {
    redisClient.quit();
  });

});

Redis 服务器在默认 6379 上运行

为了收听广播,我的 socket.php 文件有以下代码

<script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script src="https://cdn.socket.io/socket.io-1.3.4.js"></script>

    <script>
        var socket = io.connect('http://localhost:8890');
        socket.on('message', function (data) {
            $( "#messages" ).append( "<p>"+data+"</p>" );
          });
    </script>

一切正常,但我在 socket.php 页面上没有看到任何消息

任何想法如何调试这个

在本地主机上也可以正常工作

更新

原来如此

redis-cli monitor

并尝试再次执行我的代码,我可以看到 redis 正在广播这样的消息

1458128671.226586 [0 127.0.0.1:59112] "SELECT" "0"
1458128671.232152 [0 127.0.0.1:59112] "PUBLISH" "message" "Sending Message to Port"

但是在节点端我没有收到它

请!!帮帮我

【问题讨论】:

  • 您的节点服务器是否在生产环境(数字海洋)上成功运行??
  • @Drudge 我运行没有任何错误,我也做了redis-cli monitor 我可以看到我的消息像这样发布1458128671.226586 [0 127.0.0.1:59112] "SELECT" "0" 1458128671.232152 [0 127.0.0.1:59112] "PUBLISH" "message" "Sending Message to Port" But node is not receiving it
  • 你尝试访问 url:with port 吗?
  • 在我的猜测中,节点服务器没有运行。
  • Drudge 这是网址,http://dev.iclock.in/writemessage,您可以在http://dev.iclock.in/socket 上收听,在我的代码中,我删除了输入值并对消息字符串进行了硬编码,

标签: php node.js nginx socket.io laravel-5.1


【解决方案1】:

Digital Ocean 默认关闭除 :80 以外的所有端口

您需要先打开端口。您可以在这里找到解决方案

https://stackoverflow.com/a/41408983/4556995

【讨论】:

    猜你喜欢
    • 2016-03-02
    • 1970-01-01
    • 2017-07-07
    • 2021-07-27
    • 1970-01-01
    • 2021-01-08
    • 2019-06-03
    • 2018-06-10
    • 2013-10-14
    相关资源
    最近更新 更多