我从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)是在客户端没有硬编码的情况下正确获得的。
答案 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');
});
});
});
browserified
与socket.io-client
。