直播行业为赢得更广泛用户的青睐,自然要不断开发更有趣的玩法、模式,在直播源码中加入主播PK功能就是一种提高直播互动性、激发用户好胜心的方法,一方面这种方法可以吸引更多用户观看,增加主播的曝光率,另一方面它又能激发用户的购买欲,增加平台和主播的收入。
PK功能可以使用当下十分流行的Socket.IO为基础来实现。Socket.I O 是一个面向实时 web 应用的 JavaScript 库。它使服务器和客户端之间实时双向的通信成为可能。它由两个部分组成:客户端库和一个面向Node.js的服务端库。像Node.js一样,它也是事件驱动的。并且它有一个优势,它会自动选择合适的双向通信协议。我们充分利用了socket.io的优势,实现了对直播源码中PK功能流程的控制。
首先,对Socket.IO的App客户端进行初始化设置,连接服务端(基础代码如下):
代码语言:javascript复制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等特定字符判断是否需要作出相应操作,若接收到的信息是自己需要的,则作出相应操作,否则不响应,至此,一个通讯流程就这样完成了。
代码语言:javascript复制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还能做更多的事。