【问题标题】:Can't get nodejs socket.io work on my ubuntu virtual machine无法在我的 ubuntu 虚拟机上运行 nodejs socket.io
【发布时间】:2017-05-09 09:17:38
【问题描述】:

我正在尝试让我的 nodejs socket.io 应用程序在我的网站上运行,但没有任何结果。在我自己的计算机上,它可以与 xampp 一起正常工作。

npm install --save express@4.10.2npm install --save socket.io 已安装

这是我的代码:使用 nodejs 运行的 server.js

var socket = require( 'socket.io' );
var express = require( 'express' );
var http = require( 'http' );

var app = express();
var server = http.createServer( app );

var port = 8080;

var io = socket.listen( server );

io.sockets.on( 'connection', function( client ) {
    console.log("New user connected");

    client.on('message', function( data ) {
        console.log( 'Message: ' + data);

        io.sockets.emit( 'message', data);
    });
});

server.listen(port, function(){
    console.log("Listening on port: " + port);
});

这是我的 index.php

<script src="script/node_modules/socket.io-client/dist/socket.io.js"></script>
<script>
    var socket = io.connect( 'http://localhost:8080' );
</script>

我的做法与 this 不同,因为我使用的是 apache。

无论server.js 是否使用nodejs 运行,我都会收到此错误,我总是会收到同样的错误。

虚拟机来自digitalocean。

除 22、80 和 443 以外的所有端口都被阻止。

我使用sudo ufw allow 8080sudo ufw allow out 8080 允许端口8080,但它不起作用。

ufw 被禁用 sudo ufw disable 但没有工作。

我不知道接下来要尝试什么。我该如何解决这个问题?

【问题讨论】:

    标签: javascript node.js linux socket.io


    【解决方案1】:

    试试这个。我认为是节点服务器未配置。你检查你的节点日志吗?

    var app = require('express')();
    var http = require('http').Server(app);
    var io = require('socket.io')(http);
    var config = {port : 8080};
    
    http.listen(config.port, function() {
      console.log('listening on port',config.port)
    });
    
    io.on('connection', function(socket) {
        console.log("New user connected");
        socket.on('message', function( data ) {
            console.log( 'Message: ' + data);
            socket.emit( 'message', data);
        });
    });
    

    【讨论】:

    • 什么日志文件?那没有用。如果你看我的图片,你会看到它的http://localhost/socket.io,我不喜欢这样的目录
    • 谢谢,但我已经搞定了。这是我连接到http:/localhost:8080 的连接,所以我将其更改为我的公共 ip
    【解决方案2】:

    对于客户端试试这个:

    <script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
    <script type="text/javascript">
      var socket = io.connect( 'http://localhost:8080' );
    </script>
    

    对于服务器端试试这个:

    app.set('port', 8080);
    var server = http.createServer( app );
    var io = require('socket.io').listen(server);
    

    或者看看这个:可能重复 Node js Digitalocean Socket io connection refused

    location ~* \.io {
        proxy_pass http://localhost:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;        
    }
    And don't forget the upstream for your node js app
    
    upstream app_yourdomain {
        server 127.0.0.1:3000;
        keepalive 8;
    }
    

    【讨论】:

    • 我有 apache 没有 nginx
    猜你喜欢
    • 2016-06-11
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多