微信小程序使用GoEasy實現websocket實時通訊
不需要下載安裝,便可以在微信好友、微信群之間快速的轉發(fā),用戶只需要掃碼或者在微信里點擊,就可以立即運行,有著近似APP的用戶體驗,使得微信小程序成為全民熱愛的好東西~
同時因為微信小程序使用的是Javascript語法,對前端開發(fā)人員而言,幾乎是沒有學習成本和技術門檻的。對于大部分場景,都可以使用小程序快速開發(fā)實現,不論是開發(fā)周期還是開發(fā)成本都低的讓人笑哭,所以受到了技術開發(fā)團隊的各種追捧~
但如果要在小程序里快速的實現一個即時通訊功能,就有點尷尬,因為微信官方提供的只是一個底層的websocket api,要在項目中直接使用,還需要做很多額外的工作,比如首先就需要搭建自己的websocket服務~
那有沒有簡單的方式呢? 當然是有的!
今天小編就手把手的教您用GoEasy在微信小程序里,最短的時間快速實現一個websocket即時通訊Demo。

本demo已經完成了真機下的小程序的測試,完整源代碼開源到oschina的碼云上,clone后,只需要將代碼里的appkey換成自己的common key,就可以體驗了, 源碼網址:https://gitee.com/goeasy-io/GoEasyDemo-wxapp-Helloworld
1、獲取appkey
GoEasy官網上注冊賬號,創(chuàng)建一個應用,拿到您的appkey。

GoEasy提供了兩種類型的appkey:
- Common key: 即可以接收消息,也可以發(fā)送消息,與Subscribe Key最大的區(qū)別就是有寫權限,可以發(fā)消息。適用于有消息發(fā)送需求的客戶端和服務端開發(fā)。
- Subscribe key: 只能接收消息,不可以發(fā)送消息,與Common Key最大的區(qū)別就是沒有寫權限,只能收消息??梢杂糜谝恍]有發(fā)送需求的客戶端。
2、獲取GoEasy SDK
下載https://cdn.goeasy.io/download/goeasy-1.0.11.js
import GoEasy from './goeasy-1.0.11';
3、初始化GoEasy對象
var self = this;
this.goeasy = GoEasy({
host: 'hangzhou.goeasy.io',
appkey: "您的appkey",
onConnected: function () {
console.log("GoEasy connect successfully.");
self.unshiftMessage("連接成功.");
},
onDisconnected: function () {
console.log("GoEasy disconnected.")
self.unshiftMessage("連接已斷開.");
},
onConnectFailed: function (error) {
console.log(error);
self.unshiftMessage("連接失敗,請檢查您的appkey和host配置");
}
})
根據您在GoEasy后臺創(chuàng)建應用時選擇的區(qū)域,來傳入不同的Host,如果您創(chuàng)建GoEasy應用時,選擇了杭州,那么host:"hangzhou.goeasy.io"。選擇了新加坡,host:"singapore.goeasy.io"。
如果您的大部分用戶都是在國內,創(chuàng)建應用時,記得選擇杭州,以便獲得更快的通訊速度。
4、小程序端接收消息
var self = this;
this.goeasy.subscribe({
channel: "my_channel",
onMessage: function (message) {
self.unshiftMessage(message.content);
},
onSuccess: function () {
self.unshiftMessage('訂閱成功.');
}
});
很多朋友會問channel從哪里來,如何創(chuàng)建,應該傳入什么呢?
根據您的業(yè)務需求來設定,channel可以為任意字符串,除了不能包含空格,和不建議使用中文外,沒有任何限制,只需要和消息的發(fā)送端保持一致,就可以收到消息。channel可以是您直播間的uuid,也可以是一個用戶的唯一表示符,可以任意定義,channel不需要創(chuàng)建,可以隨用隨棄。
5、小程序端發(fā)送消息:
發(fā)送時,需要注意channel一定要和subscribe的channel完全一致,否則無法收到。
this.goeasy.publish({
channel: "my_channel",
message: self.data.message,
onSuccess: function () {
self.setData({
message: ''
}); //清空發(fā)送消息內容
console.log("send message success");
},
onFailed: function (error) {
self.unshiftMessage('發(fā)送失敗,請檢查您的appkey和host配置.');
}
});
本代碼源碼下載:https://gitee.com/goeasy-io/GoEasyDemo-wxapp-Helloworld
特別強調:
在運行之前,一定要在微信公眾號平臺配置socket合法域名,否則無法建立連接。具體步驟:
訪問mp.weixin.qq.com,進入微信公眾平臺|小程序 -> 設置 -> 開發(fā)設置 -> 服務器域名
socket合法域名-> 添加GoEasy的地址: wx-hangzhou.goeasy.io(記得wx-開頭)
若您創(chuàng)建GoEasy應用時選擇了新加坡區(qū)域則添加地址:wx-singapore.goeasy.io
答疑時間:
1、我的服務器端可以給小程序發(fā)送消息嗎?都支持些哪些語言?
當然可以,任何語言都可以通過調用GoEasy的Rest API發(fā)送消息,同時為了大家方便,GoEasy的官方文檔里,也準備了Java, C#,NodeJS,PHP,Ruby和Python等常見語言調用REST API的代碼。
2、GoEasy可以發(fā)送圖片,語音和視頻嗎?
當然可以,您可以通過推送文件路徑的方式來實現文件的發(fā)送。按照行業(yè)慣例,不論MSN,微信,QQ對于圖片和視頻,通常的做法都是,只推送文件路徑,而不會推送文件本身。你如果有注意的話,當您接受圖片和視頻的時候,收到消息后,等一會兒才能看,就是因為發(fā)送的時候,只發(fā)送了路徑。
3、GoEasy和微信小程序官方的websocket API有什么區(qū)別和優(yōu)勢?
小程序官方的websocket API主要是用來與您的websocket服務通訊,所以使用小程序websocket的前提是,首先要搭建好您自己的websocket服務,然后與之通訊。這是一個純技術的API,在建立網絡連接后,還有很多的工作需要自己來完成,比如:
- 需要自己實現心跳機制,來維護網絡連接,來判斷客戶端的網絡連接狀態(tài);
- 需要自己實現斷網自動重連;需要自己維護消息列表,確保遇到斷網重連后,消息能夠補發(fā);
- 需要自己維護一個客戶端列表;
- 等等很多細致而繁雜的工作,比如websocket的安全機制和性能優(yōu)化;
此之外服務端也有很多工作需要自己完成,有興趣自己搭建websocket的話,可以參考這篇技術分享《搭建websocket消息推送服務,必須要考慮的幾個問題》
而GoEasy是一個成熟穩(wěn)定的企業(yè)級websocket PAAS服務平臺,開發(fā)人員不需要考慮websocket服務端的搭建,只需要幾行代碼,就可以輕松實現客戶端與客戶端之間,服務器與客戶端之間的的websocket通信,不需要考慮性能,安全,高可用集群的問題,只需要全力專注于開發(fā)自己的業(yè)務功能就好了。
GoEasy已經內置websocket中必備的心跳,斷網重連,消息補發(fā),歷史消息和客戶端上下線提醒等特性,開發(fā)人員也不需要自己搭建websocket服務處理集群高可用,安全和性能問題。GoEasy已經穩(wěn)定運行了5年,支持千萬級并發(fā),成功支撐過很多知名企業(yè)的重要活動,安全性和可靠性都是久經考驗。
4、GoEasy在小程序的開發(fā)中主要用在那些場景呢?
從應用場景上來說,所有需要websocket通信的場景,GoEasy都可以完美支持:
- 聊天,IM,直播彈幕,用戶上下線提醒, 在線用戶列表
- 掃碼點菜,掃碼登錄, 掃碼支付, 掃碼簽到, 掃碼打印
- 事件提醒,工單,訂單實時提醒
- 在線拍賣, 在線點餐,在線選座 實時數據展示,實時監(jiān)控大屏, 金融實時行情顯示,設備監(jiān)控系統(tǒng)
- 實時位置跟蹤,外賣實時跟蹤,物流實時跟蹤
- 遠程畫板,遠程醫(yī)療,游戲,遠程在線授課
5、GoEasy的文檔為什么這么簡單?簡單到我都不知道如何使用
簡單還不好嗎?GoEasy從研發(fā)的第一天,就把追求API的極簡作為我們的工作重點。嚴格控制接口的數量,就是是為了降低開發(fā)人員的學習成本,其實就是為了讓您爽??!但這并不影響GoEasy完美支持所有的websocket即時通訊需求。
總結
到此這篇關于微信小程序使用GoEasy實現websocket實時通訊的文章就介紹到這了,更多相關微信小程序 GoEasy實時通訊內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
CascadeView級聯組件實現思路詳解(分離思想和單鏈表)
本文介紹自己最近做省市級聯的類似的級聯功能的實現思路,為了盡可能地做到職責分離跟表現與行為分離,這個功能拆分成了2個組件并用到了單鏈表來實現關鍵的級聯邏輯,下一段有演示效果的gif圖2016-04-04
關于javascript中的promise的用法和注意事項(推薦)
這篇文章主要介紹了關于javascript中的promise的用法和注意事項,需要的朋友可以參考下2021-01-01
JavaScript之class繼承_動力節(jié)點Java學院整理
這篇文章主要介紹了JavaScript之class繼承,新的關鍵字class從ES6開始正式被引入到JavaScript中。class的目的就是讓定義類更簡單,有興趣的可以了解一下2017-07-07

