Socket.io在服务器上返回Uncaught RangeError和文字javascript代码,但在本地工作正常

时间:2014-09-02 04:57:44

标签: javascript node.js socket.io openshift

我正在使用Node.js和Socket.io编写服务器/客户端并使用OpenShift托管它。当我在本地运行代码时,客户端和服务器正确连接,但是在OpenShift上,客户端拒绝连接。

在本地,请求http://127.0.0.1:8000/socket.io/?EIO=2&transport=polling&t=1409632875121-110将返回适当的JSON响应。但是,在服务器上,请求是( EDIT )超时。

编辑:以前错误正在以字面方式返回socket.io/index.js的代码内容并抛出:"未捕获的RangeError:无效的字符串长度"在sockets.io.js:3947

服务器

    self.server = require('http').createServer(self.app);
    self.io = require('socket.io').listen(self.server);
    self.io.set('transports', ['websocket', 'polling', 'xhr-polling', 'jsonp-polling']);

    ...

    self.routes['/myip'] = function(req, res){
        res.setHeader('Content-Type', 'text/html');
        res.send("" + self.ipaddress);
    }

    ...

    self.app.listen(self.port, self.ipaddress, function() {
        console.log('%s: Node server started on %s:%d ...',
                    Date(Date.now() ), self.ipaddress, self.port);
    });

    self.server.listen("8000", self.ipaddress, function(){
        console.log("Starting another server");
    });

客户端

    var request = new XMLHttpRequest();
    request.open('GET', '/myip', false);  // I want it synchronous
    request.send(null);

    if (request.status === 200) {
        var ip = request.responseText
        console.log(ip);
        socket = io.connect("http://" + ip + ":8000");
    }else{
        socket = io.connect();
        alert('There were issues connecting to server. Expect odd issues.');
    }
    socket.emit('set-host');

有关为什么这个在localhost上运行而不在托管的时候有任何想法?

编辑:我相信"字符串长度"错误实际上是客户端未找到服务器运行的症状。我更改了代码(如上所示)以确保客户端连接的IP与服务器上的IP相同。仍然在当地工作。上传时分解。

编辑2 :使用IP地址或文字网址在客户端上进行连接都会导致连接超时错误。

1 个答案:

答案 0 :(得分:0)

我认为您应该使用您的openshift网址(类似于app-domain.rhcloud.com)而不是服务器的IP地址,因为所有内容都是使用虚拟主机托管的。此外,您的服务器应该侦听端口8080而不是8000,但客户端应该使用您的openshift URL在端口8000上访问它。