
WebSocket原理
uniapp websocket体验demo:https://ext.dcloud.net.cn/plugin?id=1334
今天来讲一下WebSocket的原理,能让你更深入的去了解WebSocket,深知其原理,才能更好的去使用它。
WebSocket是HTML5出的协议,也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)。
首先HTTP有 1.1 和 1.0 之说,也就是所谓的 keep-alive ,把多个HTTP请求合并为一个,但是 Websocket 其实是一个新协议,跟HTTP协议基本没有关系,只是为了兼容现有浏览器的握手规范而已,也就是说它是HTTP协议上的一种补充。有交集,但是并不是全部。
另外Html5是指的一系列新的API,或者说新规范,新技术。Http协议本身只有1.0和1.1,而且跟Html本身没有直接关系。通俗来说,你可以用HTTP协议传输非Html数据,就是这样。再简单来说,层级不一样。
WebSocket的协议是持久化的,而HTTP是非持久化的协议。
首先我们来看个典型的 Websocket 握手
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com
这段类似HTTP协议的握手请求中,多了几个东西。我会顺便讲解下作用。
Upgrade: websocket
Connection: Upgrade
这个就是Websocket的核心了,告诉 Apache 、 Nginx 等服务器:注意啦,我发起的是Websocket协议,快点帮我找到对应的助理处理。
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
首先, Sec-WebSocket-Key 是一个 Base64 encode 的值,这个是浏览器随机生成的,告诉服务器:验证是不是真的是Websocke t助理。
然后, Sec_WebSocket-Protocol 是一个用户定义的字符串,用来区分同URL下,不同的服务所需要的协议。
最后, Sec-WebSocket-Version 是告诉服务器所使用的 Websocket Draft (协议版本)。
然后服务器会返回下列东西,表示已经接受到请求, 成功建立Websocket啦!
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept:HSmrc0sMlYUkAGmm5OPpG2HaGWk= Sec-WebSocket-Protocol: chat
这里开始就是HTTP最后负责的区域了,告诉客户端已经成功切换协议
Upgrade: websocket
Connection: Upgrade
依然是固定的,告诉客户端即将升级的是 Websocket 协议,而不是mozillasocket,lurnarsocket或者shitsocket。
然后, Sec-WebSocket-Accept 这个则是经过服务器确认,并且加密过后的 Sec-WebSocket-Key 。 服务器:返回ID CARD来证明。
后面的, Sec-WebSocket-Protocol 则是表示最终使用的协议。
至此,HTTP已经完成它所有工作了,接下来就是完全按照Websocket协议进行了。具体的协议就不在这阐述了。
关注GoEasy WebSocket 简单开发不迷路。
uniapp websocket体验demo:https://ext.dcloud.net.cn/plugin?id=1334
今天来讲一下WebSocket的原理,能让你更深入的去了解WebSocket,深知其原理,才能更好的去使用它。
WebSocket是HTML5出的协议,也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)。
首先HTTP有 1.1 和 1.0 之说,也就是所谓的 keep-alive ,把多个HTTP请求合并为一个,但是 Websocket 其实是一个新协议,跟HTTP协议基本没有关系,只是为了兼容现有浏览器的握手规范而已,也就是说它是HTTP协议上的一种补充。有交集,但是并不是全部。
另外Html5是指的一系列新的API,或者说新规范,新技术。Http协议本身只有1.0和1.1,而且跟Html本身没有直接关系。通俗来说,你可以用HTTP协议传输非Html数据,就是这样。再简单来说,层级不一样。
WebSocket的协议是持久化的,而HTTP是非持久化的协议。
首先我们来看个典型的 Websocket 握手
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com
这段类似HTTP协议的握手请求中,多了几个东西。我会顺便讲解下作用。
Upgrade: websocket
Connection: Upgrade
这个就是Websocket的核心了,告诉 Apache 、 Nginx 等服务器:注意啦,我发起的是Websocket协议,快点帮我找到对应的助理处理。
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
首先, Sec-WebSocket-Key 是一个 Base64 encode 的值,这个是浏览器随机生成的,告诉服务器:验证是不是真的是Websocke t助理。
然后, Sec_WebSocket-Protocol 是一个用户定义的字符串,用来区分同URL下,不同的服务所需要的协议。
最后, Sec-WebSocket-Version 是告诉服务器所使用的 Websocket Draft (协议版本)。
然后服务器会返回下列东西,表示已经接受到请求, 成功建立Websocket啦!
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept:HSmrc0sMlYUkAGmm5OPpG2HaGWk= Sec-WebSocket-Protocol: chat
这里开始就是HTTP最后负责的区域了,告诉客户端已经成功切换协议
Upgrade: websocket
Connection: Upgrade
依然是固定的,告诉客户端即将升级的是 Websocket 协议,而不是mozillasocket,lurnarsocket或者shitsocket。
然后, Sec-WebSocket-Accept 这个则是经过服务器确认,并且加密过后的 Sec-WebSocket-Key 。 服务器:返回ID CARD来证明。
后面的, Sec-WebSocket-Protocol 则是表示最终使用的协议。
至此,HTTP已经完成它所有工作了,接下来就是完全按照Websocket协议进行了。具体的协议就不在这阐述了。
关注GoEasy WebSocket 简单开发不迷路。

关于如何在vue-cli中引入mui.js和相关扩展
一、静态资源引入
如果只用到mui.js可以通过静态资源引入的方式,直接在index.html中通过script标签引入。
二、通过webpack引入
我项目中需要用到picker扩展,所以需要用到picker.js和poppicker.js。如果用静态资源引入的方式在调用new mui.PopPicker()的时候会报mui.PopPicker is not a constructor
参照vue-cli引入jq的方式配置webpack
const webpack = require('webpack');
const path = require('path');
resolve: {
alias: {
'src': path.resolve(__dirname, '../src'),,
// 2. 定义别名和插件位置
'mui': path.resolve(__dirname, '../src/assets/mui/js/mui.js')
}
},
plugins: [
new webpack.ProvidePlugin({
mui: "mui",
"window.mui": "mui"
})
]
最新的vue-cli3.0配置vue.config.js
// vue.config.js
const webpack = require('webpack');
const path = require('path');
chainWebpack: (config) => {
config.resolve.alias
.set('@', path.resolve(__dirname, './src'))
.set('mui', path.resolve(__dirname, './src/assets/mui/js/mui.js'))
},
configureWebpack: {
// 增加一个plugins
plugins: [
new webpack.ProvidePlugin({
mui: "mui",
"window.mui": "mui"
})
]
},
然后在需要用到的组件中就可以按需引入了
test.vue
import mui from '@/assets/mui/js/mui.js';
require('@/assets/mui/js/mui.picker.js');
require('@/assets/mui/js/mui.poppicker.js');
也可以在main.js中全局引入mui然后扩展部分按需引入
main.js
import mui from '@/assets/mui/js/mui.js';
// 可以顺便绑定到Vue实例
Vue.prototype.$mui = mui;
test.vue
require('@/assets/mui/js/mui.picker.js');
require('@/assets/mui/js/mui.poppicker.js');
一、静态资源引入
如果只用到mui.js可以通过静态资源引入的方式,直接在index.html中通过script标签引入。
二、通过webpack引入
我项目中需要用到picker扩展,所以需要用到picker.js和poppicker.js。如果用静态资源引入的方式在调用new mui.PopPicker()的时候会报mui.PopPicker is not a constructor
参照vue-cli引入jq的方式配置webpack
const webpack = require('webpack');
const path = require('path');
resolve: {
alias: {
'src': path.resolve(__dirname, '../src'),,
// 2. 定义别名和插件位置
'mui': path.resolve(__dirname, '../src/assets/mui/js/mui.js')
}
},
plugins: [
new webpack.ProvidePlugin({
mui: "mui",
"window.mui": "mui"
})
]
最新的vue-cli3.0配置vue.config.js
// vue.config.js
const webpack = require('webpack');
const path = require('path');
chainWebpack: (config) => {
config.resolve.alias
.set('@', path.resolve(__dirname, './src'))
.set('mui', path.resolve(__dirname, './src/assets/mui/js/mui.js'))
},
configureWebpack: {
// 增加一个plugins
plugins: [
new webpack.ProvidePlugin({
mui: "mui",
"window.mui": "mui"
})
]
},
然后在需要用到的组件中就可以按需引入了
test.vue
import mui from '@/assets/mui/js/mui.js';
require('@/assets/mui/js/mui.picker.js');
require('@/assets/mui/js/mui.poppicker.js');
也可以在main.js中全局引入mui然后扩展部分按需引入
main.js
import mui from '@/assets/mui/js/mui.js';
// 可以顺便绑定到Vue实例
Vue.prototype.$mui = mui;
test.vue
require('@/assets/mui/js/mui.picker.js');
require('@/assets/mui/js/mui.poppicker.js');
收起阅读 »

如何有效解决微信支付时支付授权目录出错问题
在对接微信支付的时候,不管是公众号支付,还是扫码支付,都会遇到各种各样复杂的问题,这些问题说复杂,有时候也挺简单,只是让人不容易察觉,一个很简单的小问题有时候会遇到大麻烦。那么今天跟大家分享一下如何解决微信支付时支付授权目录出错问题,估计这也是许多开发者经常会遇到的一个问题,下面就为大家详细讲解一下。
代码如下:
public function wxpay(){
header("Content-type:text/html;charset=utf-8");
$order_sn=I("order_sn");
$fa_need=M('fa_need');
$list=$fa_need->where("order_sn=$order_sn")->find();
$type=$list['type'];
$price=$list['need_salary'];
ini_set('date.timezone','Asia/Shanghai');
$time = date('Y-m-d');
vendor("WxPayPubHelper.lib.WxPay#Api");
$uid=session("uid");
$user=M("user");
$userinfo=$user->where("uid=$uid")->find();
$openid=$userinfo['openid'];
$data=$type.';'.'1'.';'.$order_sn;
//②、统一下单
$input = new \WxPayUnifiedOrder();
// dump($input);die;
$input->SetBody('XXXX');
$input->SetAttach($data);
$input->SetOut_trade_no($order_sn); //商户号加上年月日十分秒 订单号
$input->SetTotal_fee($price);
// $input->SetTotal_fee(1);
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetGoods_tag($data);
$input->SetNotify_url("网址链接");
$input->SetTrade_type("JSAPI");
$input->SetOpenid($openid);
$order = \WxPayApi::unifiedOrder($input);
$jsApiParameters = $this->GetJsApiParameters($order);
// var_dump($jsApiParameters);exit;
$this->assign('price',$price);
$this->assign('order_sn',$order_sn);
$this->assign('openid',$openid);
$this->assign('jsApiParameters',$jsApiParameters);
$this->display();
}
现在这个问题解决之后,大家在开发小程序接入微信支付就不用发愁了,如果还是存在未能得到有效解决方法的话,或者存在其他问题的话,大家可以留言讨论,我们共同学习进步。
本文由专业的微信小程序开发公司燚轩科技整理发布,原创不易,如需转载请注明出处!
在对接微信支付的时候,不管是公众号支付,还是扫码支付,都会遇到各种各样复杂的问题,这些问题说复杂,有时候也挺简单,只是让人不容易察觉,一个很简单的小问题有时候会遇到大麻烦。那么今天跟大家分享一下如何解决微信支付时支付授权目录出错问题,估计这也是许多开发者经常会遇到的一个问题,下面就为大家详细讲解一下。
代码如下:
public function wxpay(){
header("Content-type:text/html;charset=utf-8");
$order_sn=I("order_sn");
$fa_need=M('fa_need');
$list=$fa_need->where("order_sn=$order_sn")->find();
$type=$list['type'];
$price=$list['need_salary'];
ini_set('date.timezone','Asia/Shanghai');
$time = date('Y-m-d');
vendor("WxPayPubHelper.lib.WxPay#Api");
$uid=session("uid");
$user=M("user");
$userinfo=$user->where("uid=$uid")->find();
$openid=$userinfo['openid'];
$data=$type.';'.'1'.';'.$order_sn;
//②、统一下单
$input = new \WxPayUnifiedOrder();
// dump($input);die;
$input->SetBody('XXXX');
$input->SetAttach($data);
$input->SetOut_trade_no($order_sn); //商户号加上年月日十分秒 订单号
$input->SetTotal_fee($price);
// $input->SetTotal_fee(1);
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetGoods_tag($data);
$input->SetNotify_url("网址链接");
$input->SetTrade_type("JSAPI");
$input->SetOpenid($openid);
$order = \WxPayApi::unifiedOrder($input);
$jsApiParameters = $this->GetJsApiParameters($order);
// var_dump($jsApiParameters);exit;
$this->assign('price',$price);
$this->assign('order_sn',$order_sn);
$this->assign('openid',$openid);
$this->assign('jsApiParameters',$jsApiParameters);
$this->display();
}
现在这个问题解决之后,大家在开发小程序接入微信支付就不用发愁了,如果还是存在未能得到有效解决方法的话,或者存在其他问题的话,大家可以留言讨论,我们共同学习进步。
本文由专业的微信小程序开发公司燚轩科技整理发布,原创不易,如需转载请注明出处!
收起阅读 »
HBuilderX和uni-app正式发布
更新:uni-app已开源,欢迎star鼓励https://github.com/dcloudio/uni-app
更新:uni-app最新官方培训视频,见腾讯课堂:https://ke.qq.com/course/343370
看完视频,你会对uni-app有更深入的认识。
HBuilderX正式发布
从年初发布新一代HBuilderX公测版起,经历了50个版本迭代,HBuilderX终于发布了正式版!
虽然HBuilderX并不是100%覆盖老HBuilder的功能,从整体来看,HBuilderX已经是比HBuilder更好的开发工具。
HX比HB有五大优势:更流畅、更高效、更现代、更漂亮、更稳定。
- 更流畅:由于基于C++架构而非eclipse或webkit架构,HX在启动速度、大文档打开速度方面远超HB,并在众多开发工具中傲视群雄。
- 更高效:HX在多光标、无拖动选择、markdown、json、vue开发优化上,有大量的独创新特色,这些优化过的工具使得工作效率提升数倍,同样领先于业内其他工具。
- 更现代:HX内置node,插件体系大量基于node插件,提供内置终端,对vue、预编译器、webpack、npm命令运行都有良好的支持,这些现代技术栈同样能对开发效率、工程化管理项目有更多帮助。
- 更漂亮:HX拥有更漂亮简洁的界面,黑色主题也是全屏沉浸的黑色。
- 更稳定:如果几个月前说HX更稳定肯定是笑话,但今非昔比。老HB经常会在eclipse、java层面爆出一些错误,我们无力解决。但HX上我们可以控制每个环节,不再出现莫名的java错误。同时HX提供了更完善的代码保护,崩溃、断电都能有效保护代码。
从HBuilderX1.2起,所有App开发者需要的功能在HBuilderX里均已补齐(有些操作方式可能有变化,但功能是一样的)。
HX对于偏老的技术栈如jquery的支持确实不如HB,对于后端语言的支持也不如HB。
对于这些环节开发者仍然可以使用HB。
但我们仍然可以认为,HX是更值得前端工程师拥有的利器。
同时HB将逐渐减少更新频率,明年会正式停止更新。
HBuilder系列诞生来,服务了260多万开发者,我们深感荣幸,并终于打破中国人做不好开发工具的魔咒。
未来我们还将继续努力,把HBuilderX打造的更优秀,让中国的前端工程师,开发效率高于全世界!
HBuilderX的下载链接http://www.dcloud.io/hbuilderx.html
uni-app迎来里程碑突破
uni-app,是终极的跨平台框架。因为
- 跨的平台更多(Android、iOS、小程序、H5)
- 性能体验更好(小程序技术框架和weex加持)
- 三方扩展生态更丰富
即支持小程序sdk又支持原生sdk,大部分sdk厂商都有小程序sdk,也就是大部分sdk都可以直接用于uni-app的扩展生态,而且是原SDK厂商来维护。这意味着uni-app拥有了所有跨平台方案中最丰富的三方生态。开发者不用找原生工程师去封装环信、网易云信等im的原生sdk了,直接用他们的小程序sdk即可。 - 开发方式更现代
vue数据绑定、npm、webpack、各种预处理器 - 公有技术,学习成本更低
掌握uni-app需要学习的是vue的语法,小程序的api,学会这些是理所应当,并不为uni-app额外增加学习成本。
没有其他跨平台方案在这5方面可以与uni-app相提并论!
任何Hybrid方案都不是万能的,选择一种,总是会受到一些限制。
uni-app也有限制,但综合看仍然是最好的跨平台开发方案。
- 对于开发者个人:不用学习众多轮子,学好一个,什么都会做
- 对于外包公司:开发一次,给客户交付iOS、Android、小程序、H5多个平台,赚的更多,客户满意度更高
- 对于自研开发商:做小程序去拉新,转到App里实现留存和高arpu运营,是最精益的创业之道。uni-app可以以最低成本实现日活和arpu值的最大化,并可以覆盖更多流量入口。
而且这些都是免费产品,就更没有不拥抱的理由了。
uni-app开发欢迎加入QQ群,交流学习,向我们反馈意见。由于qq群满的太快,本文不再直接列最新的qq群号,请去uni-app官网左下角查看。
uni-app的官网地址:http://uniapp.dcloud.io/
最后再说下DCloud的文档、技服体系的优化
过去DCloud一些文档做的不够好,已经吸取经验,uni-app的文档比较完善,搜索也更好用。
uni-app的qq群每日数万条消息记录,高度活跃。
DCloud投入专人支持uni-app的技服工作。
官方出品的免费视频教程上线已到腾讯课堂https://ke.qq.com/course/343370。
DCloud的插件市场也已上线。
做这些产品和服务不容易,也请多支持我们。
最大的支持,当然是转发本文给朋友喽。让小伙伴们赶紧用起来HBuilderX和uni-app这样的利器!
FAQ
-
Q:uni-app的手机端用户体验怎么样?
打包成App后的体验和微信小程序一样好,在某些场景下更好。
其体验优于使用HTML开发的5+app。虽然uni-app使用了vue文件,但vue文件编译到手机上都是js,并且框架层做了自动预载和更快的联网机制,实现了更高的性能体验,尤其是联网的新页面加载速度非常快。
uni-app还支持nvue,这其实是引入了weex并在js api层面上被uni统一了。nvue的渲染效率更高。
使用uni-app开发的app,可以发现加载新页面速度极快,动画还没结束时,需要联网下的资源就可以显示了。
使用uni-app开发的微信小程序,和直接开发微信小程序相比性能没有差别,因为uni-app输出到微信时也是编译为wxml格式。 -
Q:不同平台有自己的特色,uni-app如何在一套代码里兼容?大量写if else吗
常用api都被uni-app统一了,个性化特色有优雅的条件编译方案。详见
所有平台的所有能力,都可以在uni-app中使用,不受限制。 -
Q:既然uni-app的App端使用5+引擎,是不是5+的所有强大能力都可以调用?
是的,包括Native.js、原生sdk扩展都可以用。但注意uni-app的窗体管理是在pages.json里做,不能自己管理窗体,plus.webview的api只有一些webview样式修饰的api可以使用,新建、关闭窗体的api不能用。 -
Q:uni-app支持自己扩展原生功能和离线打包吗?
支持,同5+sdk。更提供插件云打包。 -
Q:不跨端,只做App或小程序,适合用uni-app吗?或者说uni-app开发和5+App/mui开发有什么区别
新项目强烈推荐使用uni-app。
uni-app相比5+App有如下优势:- 性能体验更好,微信小程序的Hybrid方案性能是经得起考验的,支撑起一线开发商用这个技术架构获取了数亿用户。而uni-app的性能比微信小程序整体更好。
- 可跨端发布。未来是多端时代,uni-app现在已经覆盖了Android、iOS、微信小程序、H5、百度小程序、支付宝小程序、今日头条小程序。学习和使用uni-app是面向未来的正确选择。
- 使用uni-app开发App,由于基于模板和数据绑定,开发代码量比纯5+或mui更小,有更快的开发效率。
- 多了weex、小程序生态丰富的sdk等重要部分。
- DCloud在全力打造uni-app,这很关键。老项目可以暂不迁移,新项目就不要选5+App了。
-
Q:uni-app支持的手机版本最低到多少?
Android4.4、iOS8是官方会保障兼容的。
更低版本其实也能用,但官方发布时不会测试更低版本。另外如果使用flex布局,更低版本不支持的,只能使用传统css布局。 -
Q:uni-app学习难度比mui怎么样?
vue的语法+小程序的api,都是必备的通用技术。
如果你不会vue的话,需要学习了解vue。如果你开发过小程序,那组件和api基本不用再学,否则需要学一遍。如果你会vue和小程序开发,那基本没有学习成本。
没学过vue的同学,也不用掌握vue的全部,只需了解vue基础语法、虚拟dom、数据绑定、组件、vuex,其中关键是理解虚拟dom和数据绑定的思路,不要再沿袭找一个dom元素的id然后js api操作它的思路。
其他如路由、loader 不用学,cli、node.js、webpack也不需要学。但编译报错时,经常是webpack报错,需要百度查webpack报错信息。 -
Q:uni-app怎么不支持HTML的dom操作?
uni-app的web-view组件支持load本地HTML页面,所以也是支持dom的。但vue页面里不支持dom。
如无必要,我们也不推荐使用HTML。
因为现实是整个前端技术发展在去dom化,微信小程序不支持dom,vue、react也是虚拟dom。
之所以会这样是因为2点:- 性能。虚拟dom的性能更高。
- 开发效率。基于数据绑定的开发,代码量会比操作dom少很多。
所以作为前端工程师,拥抱和学习新技术是必然趋势,个人习惯应该经常update,活到老学到老。
至于基于dom的三方库用不了的问题,一方面小程序生态已经起来了,周边的三方库非常多,这些都在uni-app里可直接使用,并且兼容到了app侧。另外确实有必须使用dom的三方库,那就用web-view组件load HTML吧。
-
Q:uni-app使用的flex布局很不习惯
flex布局是更先进、更通用的布局模式,比如垂直居中,以前写起来很麻烦。
flex布局还是web和原生通吃的通用布局,使用flex布局做的界面,可以在react native、weex、快应用等平台运行,传统web布局做不到。
当然如果你不想学flex,还希望使用传统布局,也可以,把app.vue里的全局flex设置去掉就行。
另注意nvue由于是基于weex的,只支持flex布局。 -
Q:HBuilder会支持uni-app吗?
uni-app只会在HBuilderX里支持。HBuilder不会新增功能了。并且今年底会停止更新。请开发者尽快完成向HBuilderX的升级。 -
Q:是不是DCloud以后的重点是uni-app,不再演进5+和mui了?
DCloud重点是uni-app,但uni-app编译到iOS、Android时仍使用了5+引擎,5+引擎仍会积极演进。
5+引擎近期提供了原生视频、直播、指纹、ibeacon,后续还会继续强化能力。其实5+引擎也已经内置了weex渲染器,只是传统5+app开发模式下无法编译weex代码,只有uni-app里内置的编译器才能正常使用。
mui作为一个开源ui库,手机上常见的ui控件均已支持,没有什么需要新增的ui控件,本身也许久未更新了。mui过去的一个较大问题是不支持组件化和数据绑定,这部分被挪入了uni-app中。 -
Q: mpvue项目或组件是否可快速迁移到uni-app下?
是的。详细指南参考http://ask.dcloud.net.cn/article/34945 -
Q:既然uni-app有了nvue,引入了weex,假使只做app不发小程序,是否可以不用vue,所有界面都使用nvue?
理论上所有界面都可以用nvue,但不建议这么用。
首先vue页面没那么糟。只有个别场景用nvue作为补充更合适。比如左右拖来拖去的长列表。
其次weex并没有那么完善,作为局面补充使用更合理,大面积使用时也会遇到很多weex的坑。
所以各取其优势,避其短处,结合使用是最优方案。 -
Q:uni-app的成熟度怎么样?
更新:已经十几万案例了。
最后,请认真通读一遍uni-app官网,以及善用uni-app官网的搜索,你的大部分问题都会在文档里。
更新:uni-app已开源,欢迎star鼓励https://github.com/dcloudio/uni-app
更新:uni-app最新官方培训视频,见腾讯课堂:https://ke.qq.com/course/343370
看完视频,你会对uni-app有更深入的认识。
HBuilderX正式发布
从年初发布新一代HBuilderX公测版起,经历了50个版本迭代,HBuilderX终于发布了正式版!
虽然HBuilderX并不是100%覆盖老HBuilder的功能,从整体来看,HBuilderX已经是比HBuilder更好的开发工具。
HX比HB有五大优势:更流畅、更高效、更现代、更漂亮、更稳定。
- 更流畅:由于基于C++架构而非eclipse或webkit架构,HX在启动速度、大文档打开速度方面远超HB,并在众多开发工具中傲视群雄。
- 更高效:HX在多光标、无拖动选择、markdown、json、vue开发优化上,有大量的独创新特色,这些优化过的工具使得工作效率提升数倍,同样领先于业内其他工具。
- 更现代:HX内置node,插件体系大量基于node插件,提供内置终端,对vue、预编译器、webpack、npm命令运行都有良好的支持,这些现代技术栈同样能对开发效率、工程化管理项目有更多帮助。
- 更漂亮:HX拥有更漂亮简洁的界面,黑色主题也是全屏沉浸的黑色。
- 更稳定:如果几个月前说HX更稳定肯定是笑话,但今非昔比。老HB经常会在eclipse、java层面爆出一些错误,我们无力解决。但HX上我们可以控制每个环节,不再出现莫名的java错误。同时HX提供了更完善的代码保护,崩溃、断电都能有效保护代码。
从HBuilderX1.2起,所有App开发者需要的功能在HBuilderX里均已补齐(有些操作方式可能有变化,但功能是一样的)。
HX对于偏老的技术栈如jquery的支持确实不如HB,对于后端语言的支持也不如HB。
对于这些环节开发者仍然可以使用HB。
但我们仍然可以认为,HX是更值得前端工程师拥有的利器。
同时HB将逐渐减少更新频率,明年会正式停止更新。
HBuilder系列诞生来,服务了260多万开发者,我们深感荣幸,并终于打破中国人做不好开发工具的魔咒。
未来我们还将继续努力,把HBuilderX打造的更优秀,让中国的前端工程师,开发效率高于全世界!
HBuilderX的下载链接http://www.dcloud.io/hbuilderx.html
uni-app迎来里程碑突破
uni-app,是终极的跨平台框架。因为
- 跨的平台更多(Android、iOS、小程序、H5)
- 性能体验更好(小程序技术框架和weex加持)
- 三方扩展生态更丰富
即支持小程序sdk又支持原生sdk,大部分sdk厂商都有小程序sdk,也就是大部分sdk都可以直接用于uni-app的扩展生态,而且是原SDK厂商来维护。这意味着uni-app拥有了所有跨平台方案中最丰富的三方生态。开发者不用找原生工程师去封装环信、网易云信等im的原生sdk了,直接用他们的小程序sdk即可。 - 开发方式更现代
vue数据绑定、npm、webpack、各种预处理器 - 公有技术,学习成本更低
掌握uni-app需要学习的是vue的语法,小程序的api,学会这些是理所应当,并不为uni-app额外增加学习成本。
没有其他跨平台方案在这5方面可以与uni-app相提并论!
任何Hybrid方案都不是万能的,选择一种,总是会受到一些限制。
uni-app也有限制,但综合看仍然是最好的跨平台开发方案。
- 对于开发者个人:不用学习众多轮子,学好一个,什么都会做
- 对于外包公司:开发一次,给客户交付iOS、Android、小程序、H5多个平台,赚的更多,客户满意度更高
- 对于自研开发商:做小程序去拉新,转到App里实现留存和高arpu运营,是最精益的创业之道。uni-app可以以最低成本实现日活和arpu值的最大化,并可以覆盖更多流量入口。
而且这些都是免费产品,就更没有不拥抱的理由了。
uni-app开发欢迎加入QQ群,交流学习,向我们反馈意见。由于qq群满的太快,本文不再直接列最新的qq群号,请去uni-app官网左下角查看。
uni-app的官网地址:http://uniapp.dcloud.io/
最后再说下DCloud的文档、技服体系的优化
过去DCloud一些文档做的不够好,已经吸取经验,uni-app的文档比较完善,搜索也更好用。
uni-app的qq群每日数万条消息记录,高度活跃。
DCloud投入专人支持uni-app的技服工作。
官方出品的免费视频教程上线已到腾讯课堂https://ke.qq.com/course/343370。
DCloud的插件市场也已上线。
做这些产品和服务不容易,也请多支持我们。
最大的支持,当然是转发本文给朋友喽。让小伙伴们赶紧用起来HBuilderX和uni-app这样的利器!
FAQ
-
Q:uni-app的手机端用户体验怎么样?
打包成App后的体验和微信小程序一样好,在某些场景下更好。
其体验优于使用HTML开发的5+app。虽然uni-app使用了vue文件,但vue文件编译到手机上都是js,并且框架层做了自动预载和更快的联网机制,实现了更高的性能体验,尤其是联网的新页面加载速度非常快。
uni-app还支持nvue,这其实是引入了weex并在js api层面上被uni统一了。nvue的渲染效率更高。
使用uni-app开发的app,可以发现加载新页面速度极快,动画还没结束时,需要联网下的资源就可以显示了。
使用uni-app开发的微信小程序,和直接开发微信小程序相比性能没有差别,因为uni-app输出到微信时也是编译为wxml格式。 -
Q:不同平台有自己的特色,uni-app如何在一套代码里兼容?大量写if else吗
常用api都被uni-app统一了,个性化特色有优雅的条件编译方案。详见
所有平台的所有能力,都可以在uni-app中使用,不受限制。 -
Q:既然uni-app的App端使用5+引擎,是不是5+的所有强大能力都可以调用?
是的,包括Native.js、原生sdk扩展都可以用。但注意uni-app的窗体管理是在pages.json里做,不能自己管理窗体,plus.webview的api只有一些webview样式修饰的api可以使用,新建、关闭窗体的api不能用。 -
Q:uni-app支持自己扩展原生功能和离线打包吗?
支持,同5+sdk。更提供插件云打包。 -
Q:不跨端,只做App或小程序,适合用uni-app吗?或者说uni-app开发和5+App/mui开发有什么区别
新项目强烈推荐使用uni-app。
uni-app相比5+App有如下优势:- 性能体验更好,微信小程序的Hybrid方案性能是经得起考验的,支撑起一线开发商用这个技术架构获取了数亿用户。而uni-app的性能比微信小程序整体更好。
- 可跨端发布。未来是多端时代,uni-app现在已经覆盖了Android、iOS、微信小程序、H5、百度小程序、支付宝小程序、今日头条小程序。学习和使用uni-app是面向未来的正确选择。
- 使用uni-app开发App,由于基于模板和数据绑定,开发代码量比纯5+或mui更小,有更快的开发效率。
- 多了weex、小程序生态丰富的sdk等重要部分。
- DCloud在全力打造uni-app,这很关键。老项目可以暂不迁移,新项目就不要选5+App了。
-
Q:uni-app支持的手机版本最低到多少?
Android4.4、iOS8是官方会保障兼容的。
更低版本其实也能用,但官方发布时不会测试更低版本。另外如果使用flex布局,更低版本不支持的,只能使用传统css布局。 -
Q:uni-app学习难度比mui怎么样?
vue的语法+小程序的api,都是必备的通用技术。
如果你不会vue的话,需要学习了解vue。如果你开发过小程序,那组件和api基本不用再学,否则需要学一遍。如果你会vue和小程序开发,那基本没有学习成本。
没学过vue的同学,也不用掌握vue的全部,只需了解vue基础语法、虚拟dom、数据绑定、组件、vuex,其中关键是理解虚拟dom和数据绑定的思路,不要再沿袭找一个dom元素的id然后js api操作它的思路。
其他如路由、loader 不用学,cli、node.js、webpack也不需要学。但编译报错时,经常是webpack报错,需要百度查webpack报错信息。 -
Q:uni-app怎么不支持HTML的dom操作?
uni-app的web-view组件支持load本地HTML页面,所以也是支持dom的。但vue页面里不支持dom。
如无必要,我们也不推荐使用HTML。
因为现实是整个前端技术发展在去dom化,微信小程序不支持dom,vue、react也是虚拟dom。
之所以会这样是因为2点:- 性能。虚拟dom的性能更高。
- 开发效率。基于数据绑定的开发,代码量会比操作dom少很多。
所以作为前端工程师,拥抱和学习新技术是必然趋势,个人习惯应该经常update,活到老学到老。
至于基于dom的三方库用不了的问题,一方面小程序生态已经起来了,周边的三方库非常多,这些都在uni-app里可直接使用,并且兼容到了app侧。另外确实有必须使用dom的三方库,那就用web-view组件load HTML吧。
-
Q:uni-app使用的flex布局很不习惯
flex布局是更先进、更通用的布局模式,比如垂直居中,以前写起来很麻烦。
flex布局还是web和原生通吃的通用布局,使用flex布局做的界面,可以在react native、weex、快应用等平台运行,传统web布局做不到。
当然如果你不想学flex,还希望使用传统布局,也可以,把app.vue里的全局flex设置去掉就行。
另注意nvue由于是基于weex的,只支持flex布局。 -
Q:HBuilder会支持uni-app吗?
uni-app只会在HBuilderX里支持。HBuilder不会新增功能了。并且今年底会停止更新。请开发者尽快完成向HBuilderX的升级。 -
Q:是不是DCloud以后的重点是uni-app,不再演进5+和mui了?
DCloud重点是uni-app,但uni-app编译到iOS、Android时仍使用了5+引擎,5+引擎仍会积极演进。
5+引擎近期提供了原生视频、直播、指纹、ibeacon,后续还会继续强化能力。其实5+引擎也已经内置了weex渲染器,只是传统5+app开发模式下无法编译weex代码,只有uni-app里内置的编译器才能正常使用。
mui作为一个开源ui库,手机上常见的ui控件均已支持,没有什么需要新增的ui控件,本身也许久未更新了。mui过去的一个较大问题是不支持组件化和数据绑定,这部分被挪入了uni-app中。 -
Q: mpvue项目或组件是否可快速迁移到uni-app下?
是的。详细指南参考http://ask.dcloud.net.cn/article/34945 -
Q:既然uni-app有了nvue,引入了weex,假使只做app不发小程序,是否可以不用vue,所有界面都使用nvue?
理论上所有界面都可以用nvue,但不建议这么用。
首先vue页面没那么糟。只有个别场景用nvue作为补充更合适。比如左右拖来拖去的长列表。
其次weex并没有那么完善,作为局面补充使用更合理,大面积使用时也会遇到很多weex的坑。
所以各取其优势,避其短处,结合使用是最优方案。 -
Q:uni-app的成熟度怎么样?
更新:已经十几万案例了。
最后,请认真通读一遍uni-app官网,以及善用uni-app官网的搜索,你的大部分问题都会在文档里。
收起阅读 »
分享个在本地浏览器(Chrome)调试plus的stub脚本
每次都要连接到手机测试,是不是挺麻烦?
自己用js在浏览器里模拟实现了一遍plus。
最初版本是去年的,今年回头一看,h5+的API突然一下增加好多,写不下去了
分享出来给大家尝尝。
Toast,confirm这些NativeUI的,也模拟了一个,当时是在WeUI下写的,引用下就好了。
附件是 plus.js 放到合适的地方让浏览器加载就好了。
难看,但是能在浏览器里把关键流程走通。
页面里需要做一点判断
var __plus_is_ready = false;
window.addEventListener('load', function () {
//这里是调试用的,本地开发浏览器支持
if (!/Html5Plus/.test(window.navigator.userAgent)) {
var x = document.createElement('link');
x.type = "text/css";
x.rel = "stylesheet";
x.href = "/css/weui.css";
document.head.insertAdjacentElement('beforeEnd', x);
var z = document.createElement('script');
z.type = "text/javascript";
z.src = "/js/plus.js";
document.head.insertAdjacentElement('beforeEnd', z);
window.setTimeout(_onPlusReady, 100);
document.cookie = 'Token=tmxia08hoikiq7wu'
}
}, false);
function _onPlusReady() {
console.log('_onPlusReady');
if (__plus_is_ready) {
return;
} else {
__plus_is_ready = true;
}
//其它要做的事情
}
document.addEventListener('plusready', _onPlusReady, false);
每次都要连接到手机测试,是不是挺麻烦?
自己用js在浏览器里模拟实现了一遍plus。
最初版本是去年的,今年回头一看,h5+的API突然一下增加好多,写不下去了
分享出来给大家尝尝。
Toast,confirm这些NativeUI的,也模拟了一个,当时是在WeUI下写的,引用下就好了。
附件是 plus.js 放到合适的地方让浏览器加载就好了。
难看,但是能在浏览器里把关键流程走通。
页面里需要做一点判断
var __plus_is_ready = false;
window.addEventListener('load', function () {
//这里是调试用的,本地开发浏览器支持
if (!/Html5Plus/.test(window.navigator.userAgent)) {
var x = document.createElement('link');
x.type = "text/css";
x.rel = "stylesheet";
x.href = "/css/weui.css";
document.head.insertAdjacentElement('beforeEnd', x);
var z = document.createElement('script');
z.type = "text/javascript";
z.src = "/js/plus.js";
document.head.insertAdjacentElement('beforeEnd', z);
window.setTimeout(_onPlusReady, 100);
document.cookie = 'Token=tmxia08hoikiq7wu'
}
}, false);
function _onPlusReady() {
console.log('_onPlusReady');
if (__plus_is_ready) {
return;
} else {
__plus_is_ready = true;
}
//其它要做的事情
}
document.addEventListener('plusready', _onPlusReady, false);
收起阅读 »

什么行业比较适合开发微信小程序呢
在人们的日常生活中,只有出差与旅行的时候需要入住酒店,但是出差旅行并不是高频活动,为了住酒店,特意去下载一个APP,不仅占用手机内存,经久不用还容易忘记密码,那么如果能够开发一款微信小程序的话,什么问题都能解决了,而且目前就盈利效果来说,酒店餐饮行业小程序的开发优势还是非常大的,下面微信小程序开发公司就来分析解答一下吧。
酒店餐饮行业开发微信小程序可以在综合平台查询预订酒店,搜索自己熟悉或一些大品牌酒店,页面会出现其它品牌酒店的干扰,浪费时间精力。而且,各大品牌酒店在服务丰富的综合平台展示有限,只有基本的住房情况,没有突出品牌优势不利于推广,入驻平台费用高,效果却不如人意。如果酒店拥有专属小程序则可以换着花样玩各种营销,做各种品牌形象宣传。
小程序可以连接到一切有价值的场景,让身处这个场景的人可以实现所见即所得,所以无论是点餐、退房还是其他服务,在酒店小程序都能方便快捷享受处理。
“附近小程序”功能已开放,消费者在微信小程序入口进来,查看的附近小程序就能看到已拥有小程序的酒店,曝光率很高,而且小程序为传统的二维码扫描和支付功能增加了更为具体化的使用场景。
传统的的国际酒店都还没开始攻占小程序市场,给了像民宿、青年旅舍这种非传统酒店更大的市场空间与成功机率。如果酒店把小程序的二维码印刷在宣传手册或单页上面,则会让宣传单和宣传册更具备口碑传播效果,引来很多粉丝。
有微信10亿月活跃用户作为前提,小程序的推广成本低,会快速覆盖更多的人,推广知名度高,消费者对你的店有了清晰的了解,自然而然客源不断不愁生意。本文由专业的微信小程序开发公司燚轩科技整理发布,如需转载请注明出处。
在人们的日常生活中,只有出差与旅行的时候需要入住酒店,但是出差旅行并不是高频活动,为了住酒店,特意去下载一个APP,不仅占用手机内存,经久不用还容易忘记密码,那么如果能够开发一款微信小程序的话,什么问题都能解决了,而且目前就盈利效果来说,酒店餐饮行业小程序的开发优势还是非常大的,下面微信小程序开发公司就来分析解答一下吧。
酒店餐饮行业开发微信小程序可以在综合平台查询预订酒店,搜索自己熟悉或一些大品牌酒店,页面会出现其它品牌酒店的干扰,浪费时间精力。而且,各大品牌酒店在服务丰富的综合平台展示有限,只有基本的住房情况,没有突出品牌优势不利于推广,入驻平台费用高,效果却不如人意。如果酒店拥有专属小程序则可以换着花样玩各种营销,做各种品牌形象宣传。
小程序可以连接到一切有价值的场景,让身处这个场景的人可以实现所见即所得,所以无论是点餐、退房还是其他服务,在酒店小程序都能方便快捷享受处理。
“附近小程序”功能已开放,消费者在微信小程序入口进来,查看的附近小程序就能看到已拥有小程序的酒店,曝光率很高,而且小程序为传统的二维码扫描和支付功能增加了更为具体化的使用场景。
传统的的国际酒店都还没开始攻占小程序市场,给了像民宿、青年旅舍这种非传统酒店更大的市场空间与成功机率。如果酒店把小程序的二维码印刷在宣传手册或单页上面,则会让宣传单和宣传册更具备口碑传播效果,引来很多粉丝。
有微信10亿月活跃用户作为前提,小程序的推广成本低,会快速覆盖更多的人,推广知名度高,消费者对你的店有了清晰的了解,自然而然客源不断不愁生意。本文由专业的微信小程序开发公司燚轩科技整理发布,如需转载请注明出处。
收起阅读 »
网站导航栏如何实现动态效果
导航栏是每一个网站都要有的,那么对于一般的导航栏制作,相信大家都会,而且也不会遇到什么麻烦,但是如何才能让网站导航栏实现动态效果估计这会难倒很多技术人员,那么下面就来为大家分析解答一下。
Html代码:
<html>
<head>
<title>导航演示</title>
<meta charset="UTF-8">
<link rel="stylesheet" href="nav.css">
</head>
<body>
<div class="nav">
<a href="">栏目1</a>
<a href="">栏目2</a>
<a href="">栏目3</a>
<a href="">栏目4</a>
<a href="">栏目5</a>
<a href="">栏目6</a>
</div>
</body>
</html>
CSS代码:(nav.css)
.nav {
width: 1200px;
height: 40px;
margin: 0 auto;
display: flex;
align-items: center;
z-index: 9;
}
.nav > a {
height: 40px;
display: flex;
justify-content: center;
align-items: center;
color: #333;
padding: 0 20px;
font-size: 16px;
text-decoration:none;
}
接下来进入正题
第一步:引入jquery.min.js
第二部:添加js代码(nav.js)
$(function(){
$(".nav>a").each(function(){
$(this).mouseover(function(){
$(this).css({"color":"red","border-bottom":"2px solid red"})
}).mouseout(function(){
$(this).css({"color":"#333","border-bottom":"2px solid white"})
})
})
})
function中的第一行.nav>a是根据css选择器写出来的
each会选择特定的符合条件的标签
进行以上两步骤操作以后,最终html代码如下:(index.html)
<html>
<head>
<title>导航演示</title>
<meta charset="UTF-8">
<link rel="stylesheet" href="nav.css">
<script src="jquery.min.js"></script>
<script src="nav.js"></script>
</head>
<body>
<div class="nav">
<a href="">栏目1</a>
<a href="">栏目2</a>
<a href="">栏目3</a>
<a href="">栏目4</a>
<a href="">栏目5</a>
<a href="">栏目6</a>
</div>
</body>
</html>
把index.html , jquery.min.js ,nav.js ,nav.css四个文件放到同一个目录下,运行index.html再试试看,有没有效果,是不是很棒!
这里还需要跟大家说的是,单独演示不会出现问题,但是如果放在网页中,在出现动效的同时会有轻微的位置偏移,这是因为border-bottom出现和消失导致的,解决方法就是在.nav>a样式表中再添加一行border-bottom: 2px solid white。即可解决。如果大家还存在有疑问的地方可以留言,我们可以共同学习进步。
本文由专业的郑州app开发公司燚轩科技整理发布,原创内容不易,如需转载,请注明出处!
导航栏是每一个网站都要有的,那么对于一般的导航栏制作,相信大家都会,而且也不会遇到什么麻烦,但是如何才能让网站导航栏实现动态效果估计这会难倒很多技术人员,那么下面就来为大家分析解答一下。
Html代码:
<html>
<head>
<title>导航演示</title>
<meta charset="UTF-8">
<link rel="stylesheet" href="nav.css">
</head>
<body>
<div class="nav">
<a href="">栏目1</a>
<a href="">栏目2</a>
<a href="">栏目3</a>
<a href="">栏目4</a>
<a href="">栏目5</a>
<a href="">栏目6</a>
</div>
</body>
</html>
CSS代码:(nav.css)
.nav {
width: 1200px;
height: 40px;
margin: 0 auto;
display: flex;
align-items: center;
z-index: 9;
}
.nav > a {
height: 40px;
display: flex;
justify-content: center;
align-items: center;
color: #333;
padding: 0 20px;
font-size: 16px;
text-decoration:none;
}
接下来进入正题
第一步:引入jquery.min.js
第二部:添加js代码(nav.js)
$(function(){
$(".nav>a").each(function(){
$(this).mouseover(function(){
$(this).css({"color":"red","border-bottom":"2px solid red"})
}).mouseout(function(){
$(this).css({"color":"#333","border-bottom":"2px solid white"})
})
})
})
function中的第一行.nav>a是根据css选择器写出来的
each会选择特定的符合条件的标签
进行以上两步骤操作以后,最终html代码如下:(index.html)
<html>
<head>
<title>导航演示</title>
<meta charset="UTF-8">
<link rel="stylesheet" href="nav.css">
<script src="jquery.min.js"></script>
<script src="nav.js"></script>
</head>
<body>
<div class="nav">
<a href="">栏目1</a>
<a href="">栏目2</a>
<a href="">栏目3</a>
<a href="">栏目4</a>
<a href="">栏目5</a>
<a href="">栏目6</a>
</div>
</body>
</html>
把index.html , jquery.min.js ,nav.js ,nav.css四个文件放到同一个目录下,运行index.html再试试看,有没有效果,是不是很棒!
这里还需要跟大家说的是,单独演示不会出现问题,但是如果放在网页中,在出现动效的同时会有轻微的位置偏移,这是因为border-bottom出现和消失导致的,解决方法就是在.nav>a样式表中再添加一行border-bottom: 2px solid white。即可解决。如果大家还存在有疑问的地方可以留言,我们可以共同学习进步。
本文由专业的郑州app开发公司燚轩科技整理发布,原创内容不易,如需转载,请注明出处!
收起阅读 »
WebSocket 和HTTP的区别及原理
uniapp websocket体验demo:https://ext.dcloud.net.cn/plugin?id=1334
有时候还会有老铁在考虑在什么样的环境下使用WebSocket,什么样的环境下使用HTTP,今天我们来说下WebSocket和HTTP。
WebSocket和HTTP的区别
http协议是用在应用层的协议,他是基于tcp协议的,http协议建立链接也必须要有三次握手才能发送信息。
http链接分为短链接,长链接,短链接是每次请求都要三次握手才能发送自己的信息。即每一个request对应一个response。长链接是在一定的期限内保持链接。保持TCP连接不断开。客户端与服务器通信,必须要有客户端发起然后服务器返回结果。客户端是主动的,服务器是被动的。
WebSocket他是为了解决客户端发起多个http请求到服务器资源浏览器必须要经过长时间的轮训问题而生的,他实现了多路复用,他是全双工通信。在webSocket协议下客服端和浏览器可以同时发送信息。
建立了WenSocket之后服务器不必在浏览器发送request请求之后才能发送信息到浏览器。这时的服务器已有主动权想什么时候发就可以发送信息到服务器。而且信息当中不必在带有head的部分信息了与http的长链接通信来说,这种方式,不仅能降低服务器的压力。而且信息当中也减少了部分多余的信息。
HTTP的长连接与websocket的持久连接
HTTP1.1的连接默认使用长连接(persistent connection),
即在一定的期限内保持链接,客户端会需要在短时间内向服务端请求大量的资源,保持TCP连接不断开。客户端与服务器通信,必须要有客户端发起然后服务器返回结果。客户端是主动的,服务器是被动的。
在一个TCP连接上可以传输多个Request/Response消息对,所以本质上还是Request/Response消息对,仍然会造成资源的浪费、实时性不强等问题。
如果不是持续连接,即短连接,那么每个资源都要建立一个新的连接,HTTP底层使用的是TCP,那么每次都要使用三次握手建立TCP连接,即每一个request对应一个response,将造成极大的资源浪费。
长轮询,即客户端发送一个超时时间很长的Request,服务器hold住这个连接,在有新数据到达时返回Response
websocket的持久连接
只需建立一次Request/Response消息对,之后都是TCP连接,避免了需要多次建立Request/Response消息对而产生的冗余头部信息。
希望讲了这么多能够帮助大家更加深入的去了解WebSocket和HTTP之间的区别和联系。如果觉得还是没有理解可以试试用一下第三方WebSocket服务,类似GoEasy这种免费的,大家可以去了解一下。网站好像是www.goeasy.io,码了这么多…今天就说到这里咯。
uniapp websocket体验demo:https://ext.dcloud.net.cn/plugin?id=1334
有时候还会有老铁在考虑在什么样的环境下使用WebSocket,什么样的环境下使用HTTP,今天我们来说下WebSocket和HTTP。
WebSocket和HTTP的区别
http协议是用在应用层的协议,他是基于tcp协议的,http协议建立链接也必须要有三次握手才能发送信息。
http链接分为短链接,长链接,短链接是每次请求都要三次握手才能发送自己的信息。即每一个request对应一个response。长链接是在一定的期限内保持链接。保持TCP连接不断开。客户端与服务器通信,必须要有客户端发起然后服务器返回结果。客户端是主动的,服务器是被动的。
WebSocket他是为了解决客户端发起多个http请求到服务器资源浏览器必须要经过长时间的轮训问题而生的,他实现了多路复用,他是全双工通信。在webSocket协议下客服端和浏览器可以同时发送信息。
建立了WenSocket之后服务器不必在浏览器发送request请求之后才能发送信息到浏览器。这时的服务器已有主动权想什么时候发就可以发送信息到服务器。而且信息当中不必在带有head的部分信息了与http的长链接通信来说,这种方式,不仅能降低服务器的压力。而且信息当中也减少了部分多余的信息。
HTTP的长连接与websocket的持久连接
HTTP1.1的连接默认使用长连接(persistent connection),
即在一定的期限内保持链接,客户端会需要在短时间内向服务端请求大量的资源,保持TCP连接不断开。客户端与服务器通信,必须要有客户端发起然后服务器返回结果。客户端是主动的,服务器是被动的。
在一个TCP连接上可以传输多个Request/Response消息对,所以本质上还是Request/Response消息对,仍然会造成资源的浪费、实时性不强等问题。
如果不是持续连接,即短连接,那么每个资源都要建立一个新的连接,HTTP底层使用的是TCP,那么每次都要使用三次握手建立TCP连接,即每一个request对应一个response,将造成极大的资源浪费。
长轮询,即客户端发送一个超时时间很长的Request,服务器hold住这个连接,在有新数据到达时返回Response
websocket的持久连接
只需建立一次Request/Response消息对,之后都是TCP连接,避免了需要多次建立Request/Response消息对而产生的冗余头部信息。
希望讲了这么多能够帮助大家更加深入的去了解WebSocket和HTTP之间的区别和联系。如果觉得还是没有理解可以试试用一下第三方WebSocket服务,类似GoEasy这种免费的,大家可以去了解一下。网站好像是www.goeasy.io,码了这么多…今天就说到这里咯。
收起阅读 »
eclipse 运行最新的5+sdk demo
看了sdk 的下载页有一条说明 :新版本Android SDK使用aar方式发布,部分资源和jar包整合到了aar文件中
发现可能新的sdk 不再支持eclipse 但是我的项目一直都是在edlipse上 运行了一下sdk中的eclipse项目无法运行 研究了一下 终于运行起来有需要的可以找我要demo qq 147148615
看了sdk 的下载页有一条说明 :新版本Android SDK使用aar方式发布,部分资源和jar包整合到了aar文件中
发现可能新的sdk 不再支持eclipse 但是我的项目一直都是在edlipse上 运行了一下sdk中的eclipse项目无法运行 研究了一下 终于运行起来有需要的可以找我要demo qq 147148615

企业投资微信小程序开发可以做什么
我们知道,之所以不同的微信小程序开发公司给出的开发报价不一样,一方面是大家所投入的人力成本是不一样的,另一方面所使用的开发技术也是不一样的,那么具体来说小程序可以如何来做呢?都可以实现哪些用途呢?下面就来跟大家分析解答一下关于小程序的开发用途和价格等问题吧。
1、微信小程序编辑器。一款仅仅需要点击就可以生成微信小程序的开发者工具,用户只需要扫描二维码登陆、选择版本就会拥有独立的后台。解决了用户不会开发不懂开发的难题,只需要在后台修改发布产品,就可以轻松实现购物、等功能;但是由于源码限制,太过于模板化,不能修改框架只能利用后台,前端界面过死。
2、双端小程序开发不仅仅实现了一个后台控制小程序的功能、还能控制公众号,双端控制,功能强大,(多商户、分销、积分、卡卷)等。支持各行业开发,目前上线餐饮版、多商户版、汽车板、资讯版、分销版、企业版、行业通用版、门店版、新闻版、商城版等等,上百种类型模板。可以供用户任意选择。用户不需要开发技术的沉淀,只需要点击下就可以轻松的做出自己的小程序,源码可打包发布,自己的源码自己做主!
3、可视化生成工具。一款类似于H5的开发微信小程序的拖拽类型开发网站,通过每个页面的拖拽生成代码,但是由于收费问题很多功能都有限制,但是界面可以自主化设计拖拽,轻松简单,但是打包上传后有一些问题(响应慢出现等待中、自适应有些不支持、常常出现BUG)让用户哭笑不得。
通过以上对目前市场上微信小程序主流的开发模式和开发环境的介绍,相信您一定有所收获,而且现在市场上的微信小程序开发公司的开发报价都不一样,低的几百元到几千元,高的几十万到几百万不等,所以选择一家微信小程序开发公司一定要谨慎选择,如果想要开发小程序,就赶紧联系燚轩科技吧,专业的公司,一流的服务!信息来源微信小程序开发公司燚轩科技,如需转载请注明出处!
我们知道,之所以不同的微信小程序开发公司给出的开发报价不一样,一方面是大家所投入的人力成本是不一样的,另一方面所使用的开发技术也是不一样的,那么具体来说小程序可以如何来做呢?都可以实现哪些用途呢?下面就来跟大家分析解答一下关于小程序的开发用途和价格等问题吧。
1、微信小程序编辑器。一款仅仅需要点击就可以生成微信小程序的开发者工具,用户只需要扫描二维码登陆、选择版本就会拥有独立的后台。解决了用户不会开发不懂开发的难题,只需要在后台修改发布产品,就可以轻松实现购物、等功能;但是由于源码限制,太过于模板化,不能修改框架只能利用后台,前端界面过死。
2、双端小程序开发不仅仅实现了一个后台控制小程序的功能、还能控制公众号,双端控制,功能强大,(多商户、分销、积分、卡卷)等。支持各行业开发,目前上线餐饮版、多商户版、汽车板、资讯版、分销版、企业版、行业通用版、门店版、新闻版、商城版等等,上百种类型模板。可以供用户任意选择。用户不需要开发技术的沉淀,只需要点击下就可以轻松的做出自己的小程序,源码可打包发布,自己的源码自己做主!
3、可视化生成工具。一款类似于H5的开发微信小程序的拖拽类型开发网站,通过每个页面的拖拽生成代码,但是由于收费问题很多功能都有限制,但是界面可以自主化设计拖拽,轻松简单,但是打包上传后有一些问题(响应慢出现等待中、自适应有些不支持、常常出现BUG)让用户哭笑不得。
通过以上对目前市场上微信小程序主流的开发模式和开发环境的介绍,相信您一定有所收获,而且现在市场上的微信小程序开发公司的开发报价都不一样,低的几百元到几千元,高的几十万到几百万不等,所以选择一家微信小程序开发公司一定要谨慎选择,如果想要开发小程序,就赶紧联系燚轩科技吧,专业的公司,一流的服务!信息来源微信小程序开发公司燚轩科技,如需转载请注明出处!
收起阅读 »
调试贼方便
移动Web开发过程中,在真机测试时,往往会遇到一些PC调试无法重现的问题,这时候我们需要在手机上拦截错误,并有相应的输出。
公司和网上都有类似的工具/类库,但如果纯粹一个简单的调试,或许不需要引入工具或类库,我们只需要知道全局拦截的原理。
其实很简单,就是window.onerror
语法:
复制代码
onerror=handleErr
function handleErr(msg,url,l)
{
//Handle the error here
return true or false
}
浏览器是否显示标准的错误消息,取决于 onerror 的返回值。如果返回值为 false,则在控制台 (JavaScript console) 中显示错误消息。反之则不会。
实例:
下面的例子展示如何使用 onerror 事件来捕获错误:
<html>
<head>
<script type="text/javascript">
onerror=handleErr
var txt=""
function handleErr(msg,url,l)
{
txt="There was an error on this page.\n\n"
txt+="Error: " + msg + "\n"
txt+="URL: " + url + "\n"
txt+="Line: " + l + "\n\n"
txt+="Click OK to continue.\n\n"
alert(txt)
return true
}
function message()
{
adddlert("Welcome guest!")
}
</script>
</head>
<body>
<input type="button" value="View message" onclick="message()" />
</body>
</html>
移动Web开发过程中,在真机测试时,往往会遇到一些PC调试无法重现的问题,这时候我们需要在手机上拦截错误,并有相应的输出。
公司和网上都有类似的工具/类库,但如果纯粹一个简单的调试,或许不需要引入工具或类库,我们只需要知道全局拦截的原理。
其实很简单,就是window.onerror
语法:
复制代码
onerror=handleErr
function handleErr(msg,url,l)
{
//Handle the error here
return true or false
}
浏览器是否显示标准的错误消息,取决于 onerror 的返回值。如果返回值为 false,则在控制台 (JavaScript console) 中显示错误消息。反之则不会。
实例:
下面的例子展示如何使用 onerror 事件来捕获错误:
<html>
<head>
<script type="text/javascript">
onerror=handleErr
var txt=""
function handleErr(msg,url,l)
{
txt="There was an error on this page.\n\n"
txt+="Error: " + msg + "\n"
txt+="URL: " + url + "\n"
txt+="Line: " + l + "\n\n"
txt+="Click OK to continue.\n\n"
alert(txt)
return true
}
function message()
{
adddlert("Welcome guest!")
}
</script>
</head>
<body>
<input type="button" value="View message" onclick="message()" />
</body>
</html>
收起阅读 »