socket.io客户端到服务器混淆

时间:2015-09-25 15:02:35

标签: node.js websocket socket.io

我正在尝试制作一个简单的IRC来了解事情是如何运作的。我已经设置了一个本地节点服务器和另一个连接到localhost的工作区,他们说得很好。但是当我将本地服务器推送到Openshift并尝试使用带有;

的客户端连接到它时
var socket = io.connect("http://irc-abc.rhcloud.com:3000");

它没有连接。
我在这里做错了什么,或者我怎样才能做到这一点?
注意:我是websockets的新手,我正试图理解它们,我可能错过了大局。 是的,我确实在stackoverflow上找到了很多类似的问题,但它对我没有帮助,因为我说我对websockets相当新,并且在理解它时遇到了一些麻烦。

服务器

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

var ip = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1';
var port = process.env.OPENSHIFT_NODEJS_PORT || 3000;

// TO-DO verify creds against db
var credentials = {
    'username' : ''
};

io.on('connection', function(socket){
    // verify if client has username
    socket.on('login', function(credentials){
        if(credentials.username) {
            this.username = credentials.username;
            console.log( this.username  + ' connected');
            io.emit('notice', this.username  + ' connected');
        }

        else {
            console.log( 'USER GOT DENIED' );
            socket.disconnect();
        }

        // when message received
        socket.on('chat message', function (msg) {
            var message = this.username + ': ' + msg;
            io.emit('chat message', message);
        });
    });

    // when user disconnects
    socket.on('disconnect', function(){
        console.log( this.username + ' disconnected');
    });
});

http.listen(port, ip);

console.log('listening on ' + ip + ':' + port);


客户端

var socket = io.connect("irc-abc.rhcloud.com:3000");
var username = '<?php if(isset($_SESSION['username'])) echo $_SESSION['username'];
else echo 'guest'; ?>';

var credentials = {
    'username' : username
};

socket.emit('login', credentials);

$('form').submit(function() {
    if ($('#m').val()) {
        socket.emit('chat message', $('#m').val());
        $('#m').val('');
    }
    window.scrollTo(0,document.body.scrollHeight);
    return false;
});

socket.on('chat message', function(msg){
    $('#messages').append($('<li>').text(msg));
    window.scrollTo(0,document.body.scrollHeight);
});

socket.on('notice', function(notice){
    $('#messages').append($('<li>').text(notice));
    window.scrollTo(0,document.body.scrollHeight);
});

1 个答案:

答案 0 :(得分:1)

我要做的第一件事就是检查端口3000是否有防火墙。一些(大多数)主机防火墙通常不使用的所有端口(80,443等)。如果您无法立即更改防火墙,请使用端口80进行测试。