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

自从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托pipe,而socket.io绑定到此configuration中的http-server。

有没有聪明的方式不硬编码的主机名,但代码相对path?

谢谢。

编辑:

当我尝试:

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

连接错误:

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

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

最终答案

我完全忘记了我们可以在浏览器中获取当前的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'); }); }); 

你必须记住,Node.js不是一个Web服务器。 这是一个平台。 当你指定一个相对path时,它不知道你的意思是“相对于当前的域”。

当你发送网页(我不知道你的设置的细节,但也许使用一个模板variables?),你需要做的是发送域到客户端,并发送给他们localhost:5000域,重新开发,或者如果你在生产中,你是真正的域名(或者,你可以使用像nconf这样的库,但你明白了)。

不知道,到目前为止我做了如下:

 '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'); }); }); }); 

它使用socket.io-client