本文目錄一覽:
Vert.x 與 Node.js 有哪些區別
Vert.x是一個用於下一代非同步、可伸縮、並發應用的框架,旨在為JVM提供一個Node.js的替代方案。開發者可以通過它使用JavaScript、Ruby、Groovy、Java、甚至是混合語言來編寫應用。
在內部,一個vert.x實例會管理著一個小的線程集合,每個線程針對伺服器上的一個可用內核。基本上每個線程都實現了一個事件循環。當部署一個vert.x應用實例(又叫做verticle)時,伺服器會選擇一個事件循環分配給該實例。接下來針對該實例的任務都會通過該線程進行分配。由於在某一時刻可能會有成千上萬個verticle在運行,因此在同一時刻會將單個事件循環指定給多個verticle。
Verticle可與運行在相同或不同vert.x實例中的其他verticle進行通信,這是通過消息事件匯流排實現的,它類似於Erlang的actor模型。消息傳遞旨在讓系統能夠在多個可用核心上進行擴展而無需以多線程的方式來執行verticle代碼。
事件匯流排是分散式的,並不只會跨越伺服器,還會滲透進客戶端的JavaScript以處理「實時」的Web應用。
除了並發與消息傳遞外,vert.x還具有如下特性:
TCP/SSL伺服器與客戶端
HTTP/HTTPS伺服器與客戶端
WebSockets/SockJS支持
InfoQ有幸採訪到了VMWare的高級工程師Tim Fox以了解vert.x:
InfoQ:能否從架構上介紹一下vert.x及其構建方式?
Tim:vert.x的核心是用Java編寫的,接下來我們為每一種支持的JVM語言編寫了一個薄薄的API層,這樣每種語言都有一個適合於該語言的API了。我們並沒有向這些語言直接公開Java API。這意味著Ruby用戶會通過Ruby的方式編寫代碼,JS用戶會通過JS的方式編寫代碼。
InfoQ:能否描述一下在vert.x上典型的開發流程么,特別是與開發者使用Node.js的體驗進行一下對比?
我覺得這與node.js是非常類似的。實際的工作流程取決於你是在本地還是雲中運行應用。但這並非vert.x所特有的。
InfoQ:就調試、監控與運維來看,在JVM與Node.js上運行實時應用有何差別?
我想說監控與運維實際上與部署vert.x的環境之間的關係更為密切而非vert.x本身。比如說,如果將vert.x部署到雲中,那麼雲提供商可能就會為你提供監控。順便說一下,社區成員目前已經在OpenShift與Heroku上運行了Vert.x。我們希望不久之後CloudFoundry支持就會到來。
InfoQ:vert.x與Node.js有什麼基準比較么?
我們尚未發布任何的官方基準。但我自己已經完成了一些,在我所做的測試中,vert.x的性能與可伸縮性都遠遠超越了node.js。我希望在不久之後能夠發布一些基準。
InfoQ:vert.x與Netty相比如何呢?
Netty是個很棒的底層IO庫。Vert.x實際上使用了Netty。但vert.x是個用於編寫非同步應用的完整平台。Vert.x還提供了一個組件模型、文件IO及各種Netty所沒有的東西。我要說的是,在JVM世界中,Vert.x是更類似於Akka(也使用了Netty)之類的完整框架。
微信公眾平台 網頁 跳轉 如何獲取 賬號
一、通過全局Access Token獲取用戶基本信息
1. 用戶關注以及回復消息的時候,均可以獲得用戶的OpenID
xml
ToUserName![CDATA[gh_b629c48b653e]]/ToUserName
FromUserName![CDATA[ollB4jv7LA3tydjviJp5V9qTU_kA]]/FromUserName
CreateTime1372307736/CreateTime
MsgType![CDATA[event]]/MsgType
Event![CDATA[subscribe]]/Event
EventKey![CDATA[]]/EventKey
/xml
其中的FromUserName就是OpenID
2. 然後使用access_token介面,請求獲得全局Access Token
;appid=APPIDsecret=APPSECRET
返回結果:
{
“access_token”: “NU7Kr6v9L9TQaqm5NE3OTPctTZx797Wxw4Snd2WL2HHBqLCiXlDVOw2l-Se0I-WmOLLniAYLAwzhbYhXNjbLc_KAA092cxkmpj5FpuqNO0IL7bB0Exz5s5qC9Umypy-rz2y441W9qgfnmNtIZWSjSQ”,
“expires_in”: 7200
}
3. 再使用全局ACCESS_TOKEN獲取OpenID的詳細信息
;openid=OPENID
返回如下:
{
“subscribe”: 1,
“openid”: “oLVPpjqs2BhvzwPj5A-vTYAX4GLc”,
“nickname”: “方倍”,
“sex”: 1,
“language”: “zh_CN”,
“city”: “深圳”,
“province”: “廣東”,
“country”: “中國”,
“headimgurl”: “”,
“subscribe_time”: 1386160805
}
至此,獲得用戶的基本信息。
二、通過OAuth2.0方式彈出授權頁面獲得用戶基本信息
1. 首先配置回調域名
2. 構造請求url如下:
;redirect_uri=;response_type=codescope=snsapi_userinfostate=1#wechat_redirect
頁面URL中的
scope=snsapi_userinfo 表示應用授權作用域為請求用戶信息
★ 如果使用別人的AppID和AppSecret,那麼獲得的OpenID是那個有高級介面許可權的服務號的,這裡可以通過消息回復,獲取本公眾賬號下的OpenID,帶入回調中,與另一個OpenID進行關聯
;redirect_uri=;response_type=codescope=snsapi_userinfostate=1#wechat_redirect
將該鏈接回復給關注用戶,用戶點擊後,彈出應用授權界面
3. 回調頁面得到鏈接如下,回調url中將包含參數code
;state=1
或者 ;code=00b788e3b42043c8459a57a8d8ab5d9fstate=1
4. 再使用code換取oauth2的授權access_token
url如下:
;secret=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacode=00b788e3b42043c8459a57a8d8ab5d9fgrant_type=authorization_code
獲得授權Access Token:
{
“access_token”: “OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5AI1bw2uqN–2jXoBLIM5d6L9RImvm8Vg8cBAiLpWA8Vw”,
“expires_in”: 7200,
“refresh_token”: “OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5CZPAwZksiuz_6x_TfkLoXLU7kdKM2232WDXB3Msuzq1A”,
“openid”: “oLVPpjqs9BhvzwPj5A-vTYAX3GLc”,
“scope”: “snsapi_userinfo,”
}
5. 再使用授權Access Token獲取用戶信息
url如下:
;openid=oLVPpjqs9BhvzwPj5A-vTYAX3GLc
返回如下
{
“openid”: “oLVPpjqs9BhvzwPj5A-vTYAX3GLc”,
“nickname”: “方倍”,
“sex”: 1,
“language”: “zh_CN”,
“city”: “Shenzhen”,
“province”: “Guangdong”,
“country”: “CN”,
“headimgurl”: “”,
“privilege”: []
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/192509.html