Nodejs代理后面的实时聊天客户端

时间:2013-10-24 15:40:02

标签: javascript node.js sockets proxy socket.io

我正在建立一个基于 nodejs和socket.io 的实时聊天,以供专业人士使用。除了有时来自某些客户公司的计算机(大多数情况下,在Windows XP和IE8上),这种方法都可以正常工作。

该客户到达我的Apache服务器,加载包含聊天的HTML并调用下面的Javascript。不幸的是,它从未到过注入的socket.io脚本: http://example.com:843/socket.io/socket.io.js

注意:我使用websocket端口843试图避免防火墙问题(如果客户使用)

我想这可能是他们内部网络到达我们服务器的问题(可能是由内部代理/或防火墙引起的),但我无法确定,因为我无法从他们那里得到真实的反馈。所以说实话,我无视解决这个问题

查找socket.io-proxy是一个好消息,可以测试它是否可以解决我的问题。不幸的是,似乎该项目尚未构建用于Web应用程序(需要使用,许多节点模块依赖...)。

以下客户代码的简单摘要:

使用

http://example.com/mychat.php之类的HTML页面底部加载脚本
<script type="text/javascript" src="js/chatux.js"></script>

,文件包含:

// using Mootools framework
// ----------------------- ONLOAD -----------------------
$(document).addEvent('domready', function() {

    // ----------------------------------------------------------------
    // global vars
    (…)
    var ioPort = 843;
    var ioscript = 'http://'+window.location.hostname+':'+ioPort+'/socket.io/socket.io.js';

    // Set the max moment to now (because server time can be different from client time)
    moment().max( new Date().getTime() );

    // ----------------------------------------------------------------
    // Init server load

    if ( window.self === window.top ){   
        appendScript(ioscript);
        initIO();
    }

    // ----------------------------------------------------------------
    // functions

    function appendScript(pathToScript) {
        var head = document.getElementsByTagName("head")[0];
        var js = document.createElement("script");
        js.type = "text/javascript";
        js.src = pathToScript;
        js.id = 'iojsloader';
        head.appendChild(js);
    }

    function initIO(){
        setTimeout(function(){
            if (typeof io != 'undefined'){
                ConnectingMsgHandler.set('html', __t('Connecting…'));
                setTimeout(function(){
                    socket = io.connect('http://'+window.location.hostname+':'+ioPort);
                    initChatEvent( ioscript );
                    playSound('welcome');
                }, 1000);
            } else {
                ConnectingMsgHandler.set('html', __t('Waiting for the server to be ready…'));
                $('iojsloader').destroy();
                appendScript(ioscript);
                // retest to connect 90s later…
                setTimeout(function(){ initIO(); }, 9000);
            }   
        }, 1000);
    }

    function cidCheck(data){
        // checking integrity of content received÷
        // …
    }

    // ----------------------------------------------------------------
    // Events 

    function initChatEvent(){

        // sign-in onload
        socket.emit('new user', [currentUserId, currentChatId], function(data){
            if (data.cid != undefined){ currentCID = data.cid }
            if(cidCheck(data)){
                // launch chat UI…

            } else{

                alert(__t('Waiting for the server to be ready…'));

                clearInterval(timerInterval);
                var restartTimout = 30;
                setTimeout(function(){ initIO(); }, (restartTimout*1000))
                setTimeout(function(){
                    timerInterval = setInterval(function(){ $('ConnectingMsgHandler2').set('text', (restartTimout--)+'s') }, 1000);
                }, 3000);
            }
        });

        (…)
    }
});

如果您还认为问题可能是由公司代理引起的,那么您是否有任何使用socket.io-proxy嵌入网页的提示? 使用我自己的chatux.js。

也许有人遇到了同样的问题,可能还有其他提示要进行调查吗?

这个项目是我的第一个nodejs体验,所以我很抱歉我误解了一些东西。 谢谢你的帮助。

0 个答案:

没有答案