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
。