Jack Jiang

          我的最新工程MobileIMSDK:http://git.oschina.net/jackjiang/MobileIMSDK
          posts - 499, comments - 13, trackbacks - 0, articles - 1

               摘要: 本文來自公眾號“傅老師”(ID:fustory)的原創(chuàng)分享,感謝作者。1、引言如果QQ是一個人,看似風(fēng)光,其實(shí)從出生到成長,過程飽經(jīng)錯蕩,堪算坎坷。它的人生歷程確實(shí)也夠勵志的了。學(xué)習(xí)交流:- 即時通訊開發(fā)交流3群:185926912 [推薦]- 移動端IM開發(fā)入門文章:《新手入門一篇就夠:從零開發(fā)移動端IM》(本文同步發(fā)布于:http://www.52im.net...  閱讀全文

          posted @ 2018-09-05 17:07 Jack Jiang 閱讀(144) | 評論 (0)編輯 收藏

          本文由達(dá)達(dá)京東到家Java工程師季炳坤原創(chuàng)分享。

          1、前言

          達(dá)達(dá)-京東到家作為優(yōu)秀的即時配送物流平臺,實(shí)現(xiàn)了多渠道的訂單配送,包括外賣平臺的餐飲訂單、新零售的生鮮訂單、知名商戶的優(yōu)質(zhì)訂單等。為了提升平臺的用戶粘性,我們需要兼顧商戶和騎士的各自愿景:商戶希望訂單能夠準(zhǔn)時送達(dá),騎士希望可以高效搶單。那么在合適的時候提升訂單定制化的曝光率,是及時送物流平臺的核心競爭力之一。

          本文將描述“達(dá)達(dá)-京東到家”的訂單即時派發(fā)系統(tǒng)從無到有的系統(tǒng)演進(jìn)過程,以及方案設(shè)計(jì)的關(guān)鍵要點(diǎn),希望能為大家在解決相關(guān)業(yè)務(wù)場景上提供一個案例參考。

          關(guān)于“達(dá)達(dá)-京東到家”:

          達(dá)達(dá)-京東到家,是同城速遞信息服務(wù)平臺和無界零售即時消費(fèi)平臺。達(dá)達(dá)-京東到家創(chuàng)始人兼首席執(zhí)行官蒯佳祺;

          公司旗下,目前已覆蓋全國400 多個主要城市,服務(wù)超過120萬商家用戶和超 5000萬個人用戶;

          2018年8月,達(dá)達(dá)-京東到家正式宣布完成最新一輪5億美元融資,投資方分別為沃爾瑪和京東。

          (本文同步發(fā)布于:http://www.52im.net/thread-1928-1-1.html

          2、關(guān)于作者

          季炳坤:“達(dá)達(dá)-京東到家”Java工程師,負(fù)責(zé)“達(dá)達(dá)-京東到家”的訂單派發(fā)、訂單權(quán)限、合并訂單等相關(guān)技術(shù)工作的實(shí)現(xiàn)。

          3、訂單即時派發(fā)架構(gòu)的演進(jìn)

          在公司發(fā)展的初期,我們的外賣訂單從商戶發(fā)單之后直接出現(xiàn)在搶單池中,3公里之內(nèi)的騎士能夠看到訂單,并且從訂單卡片中獲取配送地址、配送時效等關(guān)鍵信息。這種暴力的顯示模式,很容易造成騎士挑選有利于自身的訂單進(jìn)行配送,從而導(dǎo)致部分訂單超時未被配送。這樣的模式,在一定程度上導(dǎo)致了商戶的流失,同時也浪費(fèi)了騎士的配送時間。

          從上面的場景可以看出來,我們系統(tǒng)中缺少一個訂單核心調(diào)度者。有一種方案是選擇區(qū)域訂單的訂單調(diào)度員,由調(diào)度員根據(jù)騎士的接單情況、配送時間、訂單擠壓等實(shí)時情況來進(jìn)行訂單調(diào)度。這種模式,看似可行,但是人力成本投入太高,且比較依賴個人的經(jīng)驗(yàn)總結(jié)。

          核心問題已經(jīng)出來了:個人的經(jīng)驗(yàn)總結(jié)會是什么呢?

          1) 騎士正在配送的訂單的數(shù)量,是否已經(jīng)飽和;

          2) 騎士的配送習(xí)慣是什么;

          3) 某一階段的訂單是否順路,騎士是否可以一起配送;

          4) 騎士到店駐留時間的預(yù)估;

          5) ...

          理清核心問題的答案,我們的系統(tǒng)派單便成為了可能。

          基于以上的原理,訂單派發(fā)模式就可以逐漸從搶單池的訂單顯示演變成系統(tǒng)派單:

          我們將會:

          1)記錄商戶發(fā)單行為;

          2)騎士配送日志及運(yùn)行軌跡等信息。

          并且經(jīng)過數(shù)據(jù)挖掘和數(shù)據(jù)分析:

          1)獲取騎士的畫像;

          2)騎士配送時間的預(yù)估;

          3)騎士到店駐留時間的預(yù)估等基礎(chǔ)信息;

          4)使用遺傳算法規(guī)劃出最優(yōu)的配送路徑;

          5)...

          經(jīng)過上述一系列算法,我們將在騎士池中匹配出最合適的騎士,進(jìn)而使用長連接(Netty)不間斷的通知到騎士。

          隨著達(dá)達(dá)業(yè)務(wù)的不斷迭代,訂單配送逐漸孵化出基于大商戶的駐店模式:基于商戶維護(hù)一批固定的專屬騎士,訂單只會在運(yùn)力不足的時候才會外發(fā)到搶單池中,正常情況使用派單模式通知騎士。

          4、訂單派發(fā)模型的方案選型

          訂單派發(fā)可以淺顯的認(rèn)為是一種信息流的推薦。在訂單進(jìn)入搶單池之前,我們會根據(jù)每個城市的調(diào)度情況,先進(jìn)行輪詢N次的派單。

          大概的表現(xiàn)形式如下圖:

          舉例:有筆訂單需要進(jìn)行推送,在推送過程中,我們暫且假設(shè)一直沒有騎士接單,那么這筆訂單會每間隔N秒便會進(jìn)行一次普通推薦,然后進(jìn)入搶單池。

          從訂單派發(fā)的流程周期上可以看出來,派發(fā)模型充斥著大量的延遲任務(wù),只要能解決訂單在什么時候可以進(jìn)行派發(fā),那么整個系統(tǒng) 50% 的功能點(diǎn)就能迎刃而解。

          我們先了解一下經(jīng)典的延遲方案,請繼續(xù)往下讀。。。

          4.1 方案1:數(shù)據(jù)庫輪詢

          通過一個線程定時的掃描數(shù)據(jù)庫,獲取到需要派單的訂單信息。

          優(yōu)點(diǎn):開發(fā)簡單,結(jié)合quartz即可以滿足分布式掃描;

          缺點(diǎn):對數(shù)據(jù)庫服務(wù)器壓力大,不利于項(xiàng)目后續(xù)發(fā)展。

          4.2 方案2:JDK的延遲隊(duì)列 - DelayQueue

          DelayQueue是Delayed元素的一個無界阻塞隊(duì)列,只有在延遲期滿時才能從中提取元素。隊(duì)列中對象的順序按到期時間進(jìn)行排序。

          優(yōu)點(diǎn):開發(fā)簡單,效率高,任務(wù)觸發(fā)時間延遲低;

          缺點(diǎn):服務(wù)器重啟后,數(shù)據(jù)會丟失,要滿足高可用場景,需要hook線程二次開發(fā);宕機(jī)的擔(dān)憂;如果數(shù)據(jù)量暴增,也會引起OOM的情況產(chǎn)生。

          4.3 方案3:時間輪 - TimingWheel

          時間輪的結(jié)構(gòu)原理很簡單,它是一個存儲定時任務(wù)的環(huán)形隊(duì)列,底層是由數(shù)組實(shí)現(xiàn),而數(shù)組中的每個元素都可以存放一個定時任務(wù)列表。列表中的每一項(xiàng)都表示一個事件操作單元,當(dāng)時間指針指向?qū)?yīng)的時間格的時候,該列表中的所有任務(wù)都會被執(zhí)行。 時間輪由多個時間格組成,每個時間格代表著當(dāng)前實(shí)踐論的跨度,用tickMs代表;時間輪的個數(shù)是固定的,用wheelSize代表。

          整個時間輪的跨度用interval代表,那么指針轉(zhuǎn)了一圈的時間為:

          interval = tickMs * wheelSize

          如果tickMs=1ms,wheelSize=20,那么便能計(jì)算出此時的時間是以20ms為一轉(zhuǎn)動周期,時間指針(currentTime)指向wheelSize=0的數(shù)據(jù)槽,此時有5ms延遲的任務(wù)插入了wheelSize=5的時間格。隨著時間的不斷推移,指針currentTime不斷向前推進(jìn),過了5ms之后,當(dāng)?shù)竭_(dá)時間格5時,就需要將時間格5所對應(yīng)的任務(wù)做相應(yīng)的到期操作。

          如果此時有個定時為180ms的任務(wù)該如何處理?很直觀的思路是直接擴(kuò)充wheelSize?這樣會導(dǎo)致wheelSize的擴(kuò)充會隨著業(yè)務(wù)的發(fā)展而不斷擴(kuò)張,這樣會使時間輪占用很大的內(nèi)存空間,導(dǎo)致效率低下,因此便衍生出了層級時間輪的數(shù)據(jù)結(jié)構(gòu)。

          180ms的任務(wù)會升級到第二層時間輪中,最終被插入到第二層時間輪中時間格#8所對應(yīng)的TimerTaskList中。如果此時又有一個定時為600ms的任務(wù),那么顯然第二層時間輪也無法滿足條件,所以又升級到第三層時間輪中,最終被插入到第三層時間輪中時間格#1的TimerTaskList中。注意到在到期時間在[400ms,800ms)區(qū)間的多個任務(wù)(比如446ms、455ms以及473ms的定時任務(wù))都會被放入到第三層時間輪的時間格#1中,時間格#1對應(yīng)的TimerTaskList的超時時間為400ms。

          隨著時間輪的轉(zhuǎn)動,當(dāng)TimerTaskList到期時,原本定時為450ms的任務(wù)還剩下50ms的時間,還不能執(zhí)行這個任務(wù)的到期操作。便會有個時間輪降級的操作,會將這個剩余時間50ms的定時任務(wù)重新提交到下一層級的時間輪中,所以該任務(wù)被放到第二層時間輪到期時間為 [40ms,60ms) 的時間格中。再經(jīng)歷了40ms之后,此時這個任務(wù)又被觸發(fā)到,不過還剩余10ms,還是不能立即執(zhí)行到期操作。所以還要再一次的降級,此任務(wù)會被添加到第一層時間輪到期時間為[10ms,11ms)的時間格中,之后再經(jīng)歷10ms后,此任務(wù)真正到期,最終執(zhí)行相應(yīng)的到期操作。

          優(yōu)點(diǎn):效率高,可靠性高(Netty,Kafka,Akka均有使用),便于開發(fā);

          缺點(diǎn):數(shù)據(jù)存儲在內(nèi)存中,需要自己實(shí)現(xiàn)持久化的方案來實(shí)現(xiàn)高可用。

          5、訂單派發(fā)方案的具體實(shí)現(xiàn)

          結(jié)合了上述的三種方案,最后決定使用redis作為數(shù)據(jù)存儲,使用timingWhell作為時間的推動者。這樣便可以將定時任務(wù)的存儲和時間推動進(jìn)行解耦,依賴Redis的AOF機(jī)制,也不用過于擔(dān)心訂單數(shù)據(jù)的丟失。

          kafka中為了處理成千上萬的延時任務(wù)選擇了多層時間輪的設(shè)計(jì),我們從業(yè)務(wù)角度和開發(fā)難度上做了取舍,只選擇設(shè)計(jì)單層的時間輪便可以滿足需求。

          1)時間格和緩存的映射維護(hù):

          假設(shè)當(dāng)前時間currentTime為11:49:50,訂單派發(fā)時間dispatchTime為11:49:57,那么時間輪的時間格#7中會設(shè)置一個哨兵節(jié)點(diǎn)(作為是否有數(shù)據(jù)存儲在redis的依據(jù) )用來表示該時間段是否會時間事件觸發(fā),同時會將這份數(shù)據(jù)放入到緩存中(key=dispatchTime+ip), 當(dāng)7秒過后,觸發(fā)了該時間段的數(shù)據(jù),便會從redis中獲取數(shù)據(jù),異步執(zhí)行相應(yīng)的業(yè)務(wù)邏輯。最后,防止由于重啟等一些操作導(dǎo)致數(shù)據(jù)的丟失,哨兵節(jié)點(diǎn)的維護(hù)也會在緩存中維護(hù)一份數(shù)據(jù),在重啟的時候重新讀取。

          2)緩存的key統(tǒng)一加上IP標(biāo)識:

          由于我們的時間調(diào)度器是依附于自身系統(tǒng)的,通過將緩存的key統(tǒng)一加上IP的標(biāo)識,這樣就可以保證各臺服務(wù)器消費(fèi)屬于自身的數(shù)據(jù),從而防止分布式環(huán)境下的并發(fā)問題,也可以減輕遍歷整個列表帶來的時間損耗(時間復(fù)雜度為O(N))。

          3)使用異步線程處理時間格中對應(yīng)的數(shù)據(jù):

          使用異步線程,是考慮到如果上一個節(jié)點(diǎn)發(fā)生異常或者超時等情況,會延誤下一秒的操作,如果使用異常可以改善調(diào)度的即時性問題。

          我們在設(shè)計(jì)系統(tǒng)的時候,系統(tǒng)的完善度和業(yè)務(wù)的滿足度是互相關(guān)聯(lián)影響的,單從上述的設(shè)計(jì)看,是會有些問題的,比如使用IP作為緩存的key,如果集群發(fā)生變更便會導(dǎo)致數(shù)據(jù)不會被消費(fèi);使用線程池異步處理也有概率導(dǎo)致數(shù)據(jù)不會被消費(fèi)。這些不會被消費(fèi)的數(shù)據(jù)會進(jìn)入到搶單池中。從派單場景的需求來看,這些場景是可以被接受的,當(dāng)然了,我們系統(tǒng)會有腳本來進(jìn)行定期的篩選,將那些進(jìn)入搶單池的訂單進(jìn)行再次派單。

          * 思考:為什么不使用ScheduledThreadPoolExecutor來定時輪詢redis?

          原因是即便這樣可以完成業(yè)務(wù)上的需求,獲取定時觸發(fā)的任務(wù),但是帶來的空查詢不但會拉高服務(wù)的CPU,redis的QPS也會被拉高,可能會導(dǎo)致redis的慢查詢會顯著增多。

          6、結(jié)語

          我們在完成一個功能的時候,往往需要一些可視化的數(shù)據(jù)來確定業(yè)務(wù)發(fā)展的正確性。因此我們在開發(fā)的時候,也相應(yīng)的記錄了一些訂單與騎士的交互動作。從每天的報(bào)表數(shù)據(jù)可以看出來,90% 以上的訂單是通過派單發(fā)出并且被騎士認(rèn)可接單。

          訂單派發(fā)的模式是提升訂單曝光率有效的技術(shù)手段,我們一直結(jié)合大數(shù)據(jù)、人工智能等技術(shù)手段希望能更好的做好訂單派發(fā),能提供更加多元化的功能,將達(dá)達(dá)打造成更加一流的配送平臺。

          附錄:更多相關(guān)技術(shù)文章

          偽即時通訊:分享滴滴出行iOS客戶端的演進(jìn)過程

          iOS的推送服務(wù)APNs詳解:設(shè)計(jì)思路、技術(shù)原理及缺陷等

          信鴿團(tuán)隊(duì)原創(chuàng):一起走過 iOS10 上消息推送(APNS)的坑

          Android端消息推送總結(jié):實(shí)現(xiàn)原理、心跳保活、遇到的問題等

          掃盲貼:認(rèn)識MQTT通信協(xié)議

          一個基于MQTT通信協(xié)議的完整Android推送Demo

          IBM技術(shù)經(jīng)理訪談:MQTT協(xié)議的制定歷程、發(fā)展現(xiàn)狀等

          求教android消息推送:GCM、XMPP、MQTT三種方案的優(yōu)劣

          移動端實(shí)時消息推送技術(shù)淺析

          掃盲貼:淺談iOS和Android后臺實(shí)時消息推送的原理和區(qū)別

          絕對干貨:基于Netty實(shí)現(xiàn)海量接入的推送服務(wù)技術(shù)要點(diǎn)

          移動端IM實(shí)踐:谷歌消息推送服務(wù)(GCM)研究(來自微信)

          為何微信、QQ這樣的IM工具不使用GCM服務(wù)推送消息?

          極光推送系統(tǒng)大規(guī)模高并發(fā)架構(gòu)的技術(shù)實(shí)踐分享

          從HTTP到MQTT:一個基于位置服務(wù)的APP數(shù)據(jù)通信實(shí)踐概述

          魅族2500萬長連接的實(shí)時消息推送架構(gòu)的技術(shù)實(shí)踐分享

          專訪魅族架構(gòu)師:海量長連接的實(shí)時消息推送系統(tǒng)的心得體會

          深入的聊聊Android消息推送這件小事

          基于WebSocket實(shí)現(xiàn)Hybrid移動應(yīng)用的消息推送實(shí)踐(含代碼示例)

          一個基于長連接的安全可擴(kuò)展的訂閱/推送服務(wù)實(shí)現(xiàn)思路

          實(shí)踐分享:如何構(gòu)建一套高可用的移動端消息推送系統(tǒng)?

          Go語言構(gòu)建千萬級在線的高并發(fā)消息推送系統(tǒng)實(shí)踐(來自360公司)

          騰訊信鴿技術(shù)分享:百億級實(shí)時消息推送的實(shí)戰(zhàn)經(jīng)驗(yàn)

          百萬在線的美拍直播彈幕系統(tǒng)的實(shí)時推送技術(shù)實(shí)踐之路

          京東京麥商家開放平臺的消息推送架構(gòu)演進(jìn)之路

          了解iOS消息推送一文就夠:史上最全iOS Push技術(shù)詳解

          基于APNs最新HTTP/2接口實(shí)現(xiàn)iOS的高性能消息推送(服務(wù)端篇)

          解密“達(dá)達(dá)-京東到家”的訂單即時派發(fā)技術(shù)原理和實(shí)踐》

          >> 更多同類文章 ……

          (本文同步發(fā)布于:http://www.52im.net/thread-1928-1-1.html

          posted @ 2018-09-04 10:20 Jack Jiang 閱讀(228) | 評論 (0)編輯 收藏

               摘要: 本文參考并引用了部分騰訊游戲?qū)W院的相關(guān)技術(shù)文章內(nèi)容,感謝原作者的分享。1、前言以現(xiàn)在主流的即時通訊應(yīng)用形態(tài)來講,一個完整的即時通訊IM應(yīng)用其實(shí)是即時通信(英文簡寫:IM=Instant messaging)和實(shí)時通信(英文簡寫:RTC=Real-time communication)2種技術(shù)組合在一起的一整套網(wǎng)絡(luò)通信系統(tǒng)。之所以以IM這個簡寫代稱整個即時通訊軟件,其實(shí)是歷史原因了(因?yàn)樵缙诘闹T如I...  閱讀全文

          posted @ 2018-08-29 18:21 Jack Jiang 閱讀(142) | 評論 (0)編輯 收藏

          1、引言

          2018年8月20日,錘子科技在北京召開了夏季新品發(fā)布會。除了新手機(jī),發(fā)布會上還正式推出了主打語音功能的即時通訊IM聊天工具:子彈短信。這款工具此前今年早些時候在「鳥巢」發(fā)布會上初次亮相,在經(jīng)歷了幾個月的測試后,如今終于正式上線了(想要嘗鮮的可以去官網(wǎng)下載:https://im.smartisan.com/,細(xì)節(jié)上坑還比較多,請自行體驗(yàn))。

          ▲ 錘子科技2018夏季新品發(fā)布會
          ▲ “子彈短信”的多端效果圖

          從“子彈短信”官網(wǎng)上的效果圖來看,這款I(lǐng)M目前至少支持iOS、Android、Web PC 3個端,還算是比較主流。在IM這片被巨頭們早已穩(wěn)固的紅海,已經(jīng)很久沒有出現(xiàn)足夠引起關(guān)注的產(chǎn)品了,老羅真是勇氣可佳。自從2013年阿里的來往和網(wǎng)易的易信發(fā)布以來,這個市場鮮有觸碰者。

          ▲ 2013年有兩款I(lǐng)M新品問市(本圖來自《史上最全即時通訊軟件簡史(精編大圖版)[附件下載]》)

          那么,老羅的“子彈短信”到底有什么特色?能否對標(biāo)熟人社交的標(biāo)桿產(chǎn)品微信呢?我們繼續(xù)往下看。。。

          (本文同步發(fā)布于:http://www.52im.net/thread-1898-1-1.html

          2、「語音轉(zhuǎn)文字」是“子彈短信”的核心特色

          與其他同類工具最大的一點(diǎn)區(qū)別是,子彈短信把「語音轉(zhuǎn)文字」放在了最重要的位置。進(jìn)入聊天界面,按下藍(lán)色的麥克風(fēng)發(fā)送語音,子彈短信會自動將語音轉(zhuǎn)換成文字。默認(rèn)設(shè)置下,子彈短信會同時發(fā)送語音和文字消息,你也可以根據(jù)需要進(jìn)行調(diào)整。

          這樣的好處是發(fā)送信息的一方可以根據(jù)自己的習(xí)慣來輸入信息,但接受信息的一方在收到通知時可以直接看到文字,而不用打開應(yīng)用來查看。相信有不少微信的用戶會遇到收到一堆通知顯示「語音」的情況,這種問題在子彈短信上就得到了解決。 

          當(dāng)然,要想實(shí)現(xiàn)好這一點(diǎn),「語音轉(zhuǎn)文字」必須要有足夠高的成功率。在我們的測試中,子彈短信大部分情況下都能很好地完成轉(zhuǎn)換。雖然偶爾也會出現(xiàn)識別的問題,好在你還可以通過聽語音的方式再次確認(rèn)。

          另外,如果你向通訊錄里的好友發(fā)送子彈短信,但對方當(dāng)前沒有下載子彈短信的話,信息會自動以手機(jī)短信的形式發(fā)送,這樣即便對方不是子彈短信的用戶也能收到信息。

          3、“子彈短信”的原則:一切都為了「更快一步」

          「快如閃電」子彈短信的廣告語。為了達(dá)成這個目的,子彈短信做了很多工作。首先是全局的懸浮球功能。打開后你可以直接通過按住懸浮球來錄入語音,然后選擇聯(lián)系人即可發(fā)送。

          進(jìn)入 App 后,點(diǎn)擊消息列表的右側(cè)的麥克風(fēng)按鈕可以直接回復(fù)消息,消息列表可同時查看多條未讀消息,這些功能降低了用戶點(diǎn)擊進(jìn)入對話的頻率。 

          如果你正在使用 Smartisan 手機(jī)的話,你還可以配合「閃念膠囊」來直接把膠囊當(dāng)作文字信息進(jìn)行發(fā)送。

          總之,這些設(shè)計(jì)都是為了能讓用戶「更快一步」地發(fā)送和回復(fù)消息。「效率」一直是錘子科技產(chǎn)品的主打特色,而子彈短信在功能上的側(cè)重也應(yīng)證了這一點(diǎn)。

          隨著 Android 和 iOS 系統(tǒng)支持鎖屏界面通知回復(fù),越來越多的用戶開始習(xí)慣不進(jìn)入 App 直接回復(fù)消息。如果子彈短信將來能實(shí)現(xiàn)直接在鎖屏界面錄入語音發(fā)送,相信回復(fù)效率還能再提升一步。

          4、「人性化」的小功能

          錘子科技的產(chǎn)品從來都不缺乏一些有趣又實(shí)用的小功能,子彈短信這次也不例外。例如,你可以將任何信息設(shè)置為稍后處理,方便你標(biāo)記出那些你需要回復(fù)和處理的信息。如果你平時習(xí)慣在聊天工具里處理工作的話,這樣一個隨手可用的「暫存箱」是非常有必要的。 

          另外子彈短信還支持「引用回復(fù)」功能,在多人聊天的情況下很實(shí)用。長按某一條消息點(diǎn)擊「引用并回復(fù)」,你就可以針對這一條消息進(jìn)行回復(fù),避免意義不明的問題。

          還有一個有趣的功能叫「這是誰來著?」。我們有時會遇到因?yàn)楦鷮Ψ讲唤?jīng)常聯(lián)系導(dǎo)致一換頭像就不認(rèn)識了的尷尬。在子彈短信里,點(diǎn)擊聯(lián)系人信息可以看到好友的歷史頭像。如果你覺得還是記不起來的話,可以點(diǎn)擊底部的「這是誰來著?」,應(yīng)用會顯示與該好友第一次的對話記錄,幫你回想起來這是誰。

          更多子彈短信的功能,可以看看這篇《有點(diǎn)特別的聊天工具——子彈短信》。

          5、小結(jié)一下

          子彈短信是一款追求「快」的IM聊天工具。從語音出發(fā),在功能設(shè)計(jì)的各個節(jié)點(diǎn)上想辦法給用戶帶來「更快一步」的體驗(yàn),從這個方面來說,它有著自己很鮮明的特色。

          不過,在目前這個大環(huán)境下,想要找到自己的位置,子彈短信還需要回答一個核心問題:已經(jīng)有微信這樣強(qiáng)大IM,我們?yōu)槭裁催€需要另一款聊天工具?

          聊天工具的本質(zhì)是用來連接人的社交關(guān)系,而子彈短信的各種功能相比于微信來說更適合于工作場景。如果你覺得微信在工作交流上不夠好用,想嘗試一下把自己的工作和生活進(jìn)行區(qū)分,并且有能力自己選擇工具,或許子彈短信是一個值得一試的選擇。

          不過,要想跟微信對標(biāo),哪有那么容易,你以為微信的成功是個偶然嗎?請看看下面的文章:

          微信七年回顧:歷經(jīng)多少質(zhì)疑和差評,才配擁有今天的強(qiáng)大

          前創(chuàng)始團(tuán)隊(duì)成員分享:盤點(diǎn)微信的前世今生——微信成功的必然和偶然

          即時通訊創(chuàng)業(yè)必讀:解密微信的產(chǎn)品定位、創(chuàng)新思維、設(shè)計(jì)法則等

          好了,即時通訊產(chǎn)品真的沒有那么容易成功:《為什么說即時通訊社交APP創(chuàng)業(yè)就是一個坑?》。不過,但愿“子彈短信”是個例外。

          附錄:更多文章

          技術(shù)往事:微信估值已超5千億,雷軍曾有機(jī)會收編張小龍及其Foxmail

          QQ和微信兇猛成長的背后:騰訊網(wǎng)絡(luò)基礎(chǔ)架構(gòu)的這些年

          閑話即時通訊:騰訊的成長史本質(zhì)就是一部QQ成長史

          2017微信數(shù)據(jù)報(bào)告:日活躍用戶達(dá)9億、日發(fā)消息380億條

          騰訊開發(fā)微信花了多少錢?技術(shù)難度真這么大?難在哪?

          技術(shù)往事:創(chuàng)業(yè)初期的騰訊——16年前的冬天,誰動了馬化騰的代碼》 

          技術(shù)往事:史上最全QQ圖標(biāo)變遷過程,追尋IM巨人的演進(jìn)歷史》 

          技術(shù)往事:“QQ群”和“微信紅包”是怎么來的?》 

          開發(fā)往事:深度講述2010到2015,微信一路風(fēng)雨的背后》 

          開發(fā)往事:微信千年不變的那張閃屏圖片的由來》 

          開發(fā)往事:記錄微信3.0版背后的故事(距微信1.0發(fā)布9個月時)》 

          一個微信實(shí)習(xí)生自述:我眼中的微信開發(fā)團(tuán)隊(duì)

          首次揭秘:QQ實(shí)時視頻聊天背后的神秘組織

          為什么說即時通訊社交APP創(chuàng)業(yè)就是一個坑?

          微信七年回顧:歷經(jīng)多少質(zhì)疑和差評,才配擁有今天的強(qiáng)大

          前創(chuàng)始團(tuán)隊(duì)成員分享:盤點(diǎn)微信的前世今生——微信成功的必然和偶然

          即時通訊創(chuàng)業(yè)必讀:解密微信的產(chǎn)品定位、創(chuàng)新思維、設(shè)計(jì)法則等

          >> 更多同類文章 ……

          (本文同步發(fā)布于:http://www.52im.net/thread-1898-1-1.html

          posted @ 2018-08-22 19:47 Jack Jiang 閱讀(160) | 評論 (0)編輯 收藏

               摘要: 1、前言可能有初學(xué)者會問,即時通訊應(yīng)用的通信安全,不就是對Socket長連接進(jìn)行SSL/TLS加密這些知識嗎,干嗎要理解HTTPS協(xié)議呢。這其實(shí)是個誤解:當(dāng)今主流的移動端IM數(shù)據(jù)通信,總結(jié)下來無外乎就是長連接+短連接的方式,長連接就是眾所周之的TCP、UDP、WebSocket(WebSocket的本質(zhì)還是TCP),而短連接就是HTTP/HTTPS了。即時通訊IM應(yīng)用中,短連接的安全跟長連接相比,...  閱讀全文

          posted @ 2018-08-20 18:24 Jack Jiang 閱讀(153) | 評論 (0)編輯 收藏

               摘要: 1、前言跨平臺一直是老生常談的話題,cordova、ionic、react-native、weex、kotlin-native、flutter等跨平臺框架的百花齊放,頗有一股推倒原生開發(fā)者的勢頭。為什么我們需要跨平臺開發(fā)? 本質(zhì)上,跨平臺開發(fā)是為了增加代碼復(fù)用,減少開發(fā)者對多個平臺差異適配的工作量,降低開發(fā)成本,提高業(yè)務(wù)專注的同時,提供比web更好的體驗(yàn)。嗯~通俗了說就是:省錢、偷懶。目...  閱讀全文

          posted @ 2018-08-13 10:51 Jack Jiang 閱讀(362) | 評論 (0)編輯 收藏

               摘要: 本文內(nèi)容由公眾號“格友”原創(chuàng)分享。1、引言(不羈的大神,連豎中指都這么帥)因?yàn)長INUX操作系統(tǒng)的流行,Linus 已經(jīng)成為地球人都知道的名人。雖然大家可能都聽過錢鐘書先生的名言:“假如你吃個雞蛋覺得味道不錯,又何必認(rèn)識那個下蛋的母雞呢?” 但是如果真是遇到一個“特別顯赫”的雞蛋,很多人還是想看看能生出這顆神蛋的母雞的,或者想...  閱讀全文

          posted @ 2018-08-09 16:32 Jack Jiang 閱讀(239) | 評論 (0)編輯 收藏

               摘要: 1、引言本文來自新浪微博視頻轉(zhuǎn)碼平臺技術(shù)負(fù)責(zé)人李成亞在LiveVideoStackCon 2017上的分享,由LiveVideoStack整理成文。李成亞分享了微博短視頻如何提升用戶體驗(yàn)、降低成本的思路與實(shí)踐,包括提升短視頻發(fā)布速度,降低長視頻轉(zhuǎn)碼時間,通過新的Codec減少帶寬成本等。本文的短視頻技術(shù)跟IM的單聊、群聊、朋友圈里的小視頻是類似的東西,文中針對短視頻的相關(guān)優(yōu)化實(shí)踐可以為您的IM小視...  閱讀全文

          posted @ 2018-08-06 16:34 Jack Jiang 閱讀(160) | 評論 (0)編輯 收藏

               摘要: 1、前言對于廣大Android開發(fā)者來說,Android O(即Android 8.0)還沒玩熱,Andriod P(即Andriod 9.0)又要來了。下圖上谷歌官方公布的Android P發(fā)布路線圖:Android P的最后一個開發(fā)者預(yù)覽版(即DP5)已如期發(fā)布于2018年7月26日,根據(jù)上面這張發(fā)布路線圖,相信Android P的正式版將很快到來。對于Andriod開發(fā)者來說,不管Andri...  閱讀全文

          posted @ 2018-08-02 15:27 Jack Jiang 閱讀(343) | 評論 (0)編輯 收藏

               摘要: 本文內(nèi)容由“微信多媒體團(tuán)隊(duì)”整理發(fā)布。1、引言廣州TIT創(chuàng)意園,這里是騰訊在廣州的研發(fā)團(tuán)隊(duì)所在地,LiveVideoStack采訪了微信多媒體內(nèi)核中心音視頻算法高級工程師梁俊斌(Denny)。從華為2012實(shí)驗(yàn)室到騰訊,過去十余年梁俊斌一直專注在音頻技術(shù)。他告訴LiveVideoStack:音頻技術(shù)還有許多難點(diǎn)需要解決,而作為技術(shù)人也延展到應(yīng)用場景,關(guān)注用戶需求。本文整理了...  閱讀全文

          posted @ 2018-07-31 15:25 Jack Jiang 閱讀(396) | 評論 (0)編輯 收藏

          僅列出標(biāo)題
          共50頁: First 上一頁 40 41 42 43 44 45 46 47 48 下一頁 Last 
          Jack Jiang的 Mail: jb2011@163.com, 聯(lián)系QQ: 413980957, 微信: hellojackjiang
          主站蜘蛛池模板: 时尚| 扎赉特旗| 黔东| 福清市| 黎城县| 黄石市| 高阳县| 东宁县| 炉霍县| 金昌市| 门源| 城固县| 鄂尔多斯市| 淳化县| 克东县| 舒兰市| 崇明县| 河北区| 定日县| 措美县| 定安县| 密山市| 大埔区| 英山县| 安达市| 蒙自县| 新巴尔虎左旗| 五台县| 石门县| 建昌县| 盐津县| 镇赉县| 宁阳县| 永昌县| 永新县| 汶上县| 电白县| 宣威市| 东乡族自治县| 巴东县| 凤山县|