var socket = io.connect(' http:// yourhostname /');?

时间:2014-06-01 21:16:02

标签: node.js socket.io

我从v.1.0发布后再次尝试socket.io。

作为博士, https://github.com/Automattic/socket.io


服务器端:

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

io.on('connection', function(socket){
  socket.on('event', function(data){});
  socket.on('disconnect', function(){});
});
server.listen(5000);

客户端

var socket = io.connect('http://yourhostname.com/');

在发展中,当然 var socket = io.connect('http://localhost:5000/');


它有效,但我对在客户端代码(/index.js)中对主机名(subdomain.domain)进行硬编码感到非常不舒服。

index.js由http-sever托管,socket.io在此配置中捆绑到http-server。

有没有聪明的方法可以不对主机名进行硬编码,而是在某些相对路径中进行编码?

感谢。

编辑:

当我尝试:

var socket = io.connect('./');

连接错误:

GET http://.:5000/socket.io/?EIO=2&transport=polling&t=1401659441615-0 net::ERR_NAME_NOT_RESOLVED

是这样的,所以至少端口号(5000)是在客户端没有硬编码的情况下正确获得的。

3 个答案:

答案 0 :(得分:2)

最后答案。

我完全相信我们可以在浏览器中获取当前的url / domain。

window.location.hostname

所以,简单地说:

'use strict';
/*global window, require, console, __dirname, $,alert*/

var log = function(msg)
{
    console.log(msg);
};
log('init');

$('document').ready(function()
{
    var io = require('socket.io-client');

    var socket = io.connect(window.location.hostname);
    socket.on('connect', function()
    {
        log('socket connected');
    });

});

答案 1 :(得分:0)

您必须记住Node.js不是Web服务器。这是一个平台。当您指定相对路径时,它并不知道您相对于当前域的意思。"

您需要做的是在将网页发送给客户端时将其发送给客户端(我不知道您的设置的细节,但可能使用模板变量?),并将{{}发送给他们1}}域名,如果您正在开发中,或者您的真实域名,如果您正在制作中(或者,您可以使用像nconf一样的库,但您明白了。)

答案 2 :(得分:0)

dunno,到目前为止,我做了如下:

'use strict';
/*global window, require, console, __dirname, $,alert*/

var log = function(msg)
{
    console.log(msg);
};
log('init');

$.getJSON("../config.json", function(data)
{
    var host = data.url;
    var port = data.port;

    $('document').ready(function()
    {
        alert(host + ':' + port);

        var io = require('socket.io-client');

        var socket = io.connect(host);
        socket.on('connect', function()
        {
            log('socket connected');
        });

    });

});

browserifiedsocket.io-client