下个星期向同学展示一个联机小游戏,在自己电脑上开个服务器让他们通过来连接访问进入游戏,但是因为ip不固定,每次都要改客户端文件里面连接服务器的url。所以能不能到时候告诉同学们我电脑ip地址后让他们直接在浏览器里面输入ip加端口访问进入游戏,但是希望客户端可以动态获取服务器ip,而不是写死的;说的可能不清楚,我用的是socket.io.js,客户端有个方法io.connect(url)所以就必须知道这个url。其实可以从浏览器地址栏获取,但是感觉这样不太好,有谁有比较好的方法吗,么么哒
ringa_lee2017-04-10 16:02:22
真实的项目可以在服务端启动的时候获取本地 ip,然后写入到静态文件(如 HTML 中的某个隐藏标签中),这样 JavaScript 可以动态获取。也可以通过调用 server 的接口来获取参数再交给 socket.io。
比如说很多前端项目用 gulp 做构建(当然任何 task runner 都可以),那么就可以在服务器端启动服务前运行 production 环境构建,由于构建是运行在 node 环境下的,可以获取到任何你想要的数据(只要够权限),命令行获取的参数可以传递给 gulp 脚本,然后 gulp build 时写入目标文件(比如利用 gulp-replace 等插件),之后浏览器加载页面时,JS 动态获取插入的信息即可。
因此,既然你有 node 的服务端,自然可以在伺服静态资源之前动态改写(或插入)其中的内容,这并不是什么困难的工作。
再简单一点,也可以服务端把必要的信息写入一个数据文件(比如 JSON),然后 JS 请求这个文件来获取也可以,其道理类似服务端扩展一个接口供客户端访问。
直接获取浏览器的 url 不是不可以,但当然不够好,因为很多时候 socket 服务未必和 web server 在一个 host 上。
伊谢尔伦2017-04-10 16:02:22
var os=require('os'),
iptable={},
ifaces=os.networkInterfaces();
for (var dev in ifaces) {
ifaces[dev].forEach(function(details,alias){
if (details.family=='IPv4') {
iptable[dev+(alias?':'+alias:'')]=details.address;
}
});
}
console.log(iptable);