版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yun_bao_2144899870/article/details/87917448
直播平台源码中聊天服务器是通过socket.io实现的,在功能设计中,很多功能需要通过接口操作后广播到客户端实现消息通知,单纯使用php是无法实现的,需要在php处理后将消息通过socket.io通知到客户端,实现方式如下。
代码示列:
1.在socket.io的js脚本中增加http新的端口监听,并将监听获得数据进行相应规则转发,代码如下 :
//html监听
var servera = http.createServer(function(req, res) {
// var params = url.parse(req.url, true).query;
var body = "";
//请求链接
// console.log(req.url);
//每当接收到请求体数据,累加到post中
req.on('data', function (chunk) {
body += chunk; //一定要使用+=,如果body=chunk,因为请求favicon.ico,body会等于{}
//console. log("chunk:",chunk);
});
req.on('end', function () {
// 解析参数
//console. log("body:",body);
body = querystring.parse(body); //将一个字符串反序列化为一个对象
do_msg(body);
res.end();
});
res.end();
}).listen(19999, function() {
//console. log('服务开启19999');
});
//data. type 0 全站 1 单播 2 房间内
function do_msg(data){
if(typeof(data.type) == 'string' && typeof(data.action) == 'string' && typeof(data.method) == 'string' && typeof(data.ct) == 'string'){
if(data.type == '0'){
var data_obj={
"msg":[
{
"_method_":data.method,
"action":data.action,
"ct":''+ data.ct,
"msgtype":"4"
}
],
"retcode":"000000",
"retmsg":"OK"
};
io.emit('broadcastingListen',[JSON.stringify(data_obj)]);
}else if(data.type == '1'){
// console.log(1);
if(typeof(data.target) == 'string' ){
var targetarr=evalJson(data.target);
// console.log(targetarr[0]);
if(typeof(targetarr) == 'object' ){
// console.log(3);
var data_obj={
"msg":[
{
"_method_":data.method,
"action":data.action,
"ct":''+ data.ct,
"msgtype":"4"
}
],
"retcode":"000000",
"retmsg":"OK"
};
for(var i in targetarr){
// console.log(i);
// console.log(sockets[targetarr[i]]);
if(typeof(sockets[targetarr[i]]) != 'undefined' && sockets[targetarr[i]] != null){ sockets[targetarr[i]].emit("broadcastingListen",[JSON.stringify(data_obj)]);
}
}else if(data.type == '2'){
//console. log(1);
if(typeof(data.target) == 'string' ){
var targetarr=evalJson(data.target);
// console.log(targetarr[0]);
if(typeof(targetarr) == 'object' ){
// console.log(3);
var data_obj={
"msg":[
{
"_method_":data.method,
"action":data.action,
"ct":''+ data.ct,
"msgtype":"4"
}
],
"retcode":"000000",
"retmsg":"OK"
};
for(var i in targetarr) {
io. sockets. in(targetarr[i]).emit("broadcastingListen",[JSON.stringify(data_obj)]);
}
2.直播平台源码中聊天服务器在php的相应的接口处理流程中调用如下方法:
function Post_node($curlPost,$url='http:// 127.0.0.1:19999'){
$paramurl = http_build_query($curlPost , '' , '&');
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_NOBODY, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $paramurl);
$return_str = curl_exec($curl);
curl_close($curl);
return $return_str;
}
以上,就是云豹直播平台源码服务器聊天实现展示,详细介绍了关于通过socket.io实现形式,和单纯使用php展示,如此,即可在云豹直播功能设计中实现访问php实现消息广播了。
声明:本篇文章为原创,转载请注明出处及作者。