直播行業為贏得更廣泛用戶的青睞,自然要不斷開發更有趣的玩法、模式,在直播源碼中加入主播PK功能就是一種提高直播互動性、激發用戶好勝心的方法,一方面這種方法可以吸引更多用戶觀看,增加主播的曝光率,另一方面它又能激發用戶的購買欲,增加平臺和主播的收入。
PK功能可以使用當下十分流行的Socket.IO為基礎來實現。Socket.I O 是一個面向實時 web 應用的 JavaScript 庫。它使服務器和客戶端之間實時雙向的通信成為可能。它由兩個部分組成:客戶端庫和一個面向Node.js的服務端庫。像Node.js一樣,它也是事件驅動的。并且它有一個優勢,它會自動選擇合適的雙向通信協議。我們充分利用了socket.io的優勢,實現了對直播源碼中PK功能流程的控制。
首先,對Socket.IO的App客戶端進行初始化設置,連接服務端(基礎代碼如下):
try {
IO.Options option = new IO.Options();
option.forceNew = true;
option.reconnection = true;
option.reconnectionDelay = 2000;
mSocket = IO.socket(AppConfig.getInstance().getSocketServer(), option);
mSocketHandler = new SocketHandler();
} catch (Exception e) {
e.printStackTrace();
L.e(TAG, "socket異常--->" + e.getMessage());
}
public SocketUtil connect(String liveuid, String stream) {
if (mSocket != null) {
mSocket.on(Socket.EVENT_CONNECT, mConnectListener);//連接成功
mSocket.on(Socket.EVENT_DISCONNECT, mDisConnectListener);//斷開連接
mSocket.on(Socket.EVENT_CONNECT_ERROR, mErrorListener);//連接錯誤
mSocket.on(Socket.EVENT_CONNECT_TIMEOUT, mTimeOutListener);//連接超時
mSocket.on(Socket.EVENT_RECONNECT, mReConnectListener);//重連
mSocket.on(CONN, onConn);//連接socket消息
mSocket.on(BROADCAST, onBroadcast);//接收服務器廣播的具體業務邏輯相關的消息
mSocket.connect();
mLiveuid = liveuid;
mStream = stream;
}
return this;
}
然后再與服務端實現通信。只需要簡單傳入參數,并emit到服務端,服務端接收后通過邏輯處理,向相應的App端轉發socket信息,這時,接收到消息的客戶端根據socket的method、action等特定字符判斷是否需要作出相應操作,若接收到的信息是自己需要的,則作出相應操作,否則不響應,至此,一個通訊流程就這樣完成了。
public void anchorBusy(String touid) {
if (mSocket == null) {
return;
}
mSocket.emit(SEND,
new SendSocketBean()
.param("_method_", LINK_MIC) ??//參數
.param("action", 7) ?//參數
.param("msgtype", 10) //參數
.param("touid", touid) ?//參數
.create()
);
}
通過使用Socket.I O,可以實現A客戶端與服務端與B客戶端進行連麥PK的操作,當然,Socket.IO還能做更多的事。