20,359
社区成员
发帖
与我相关
我的任务
分享
/*------------------------------------------------------ */
//-- socket客户端
/*------------------------------------------------------ */
//+error_reporting(0);
set_time_limit(0);
// 接收GET数据
$msg = isset($_GET['msg']) ? trim($_GET['msg']) : '';
// socket错误代码
function strerror($code) {
$str = '';
switch($code) {
case 10022:
$str = '参数错误';
break;
case 10048:
$str = '通常每个套接字地址(协议/网络地址/端口)只允许使用一次。';
break;
case 10061:
$str = '由于服务器积极拒绝,连接失败!';
break;
default:
$str = '未知错误';
break;
}
return $str;
}
function get_server_config() {
return simplexml_load_file('include/server_config.xml');
}
// 获取socket服务端配置信息
$server_conf = get_server_config();
$ip = $server_conf->ip;
$port = (int)$server_conf->port;
$out_str = '{"is_ok":0,"data":';
// 创建socket
if(($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
$out_str .= '"' . strerror(socket_last_error()) . '"}';
}
// 连接到服务器
else if(socket_connect($socket, $ip, $port) === false) {
$out_str .= '"' . strerror(socket_last_error($socket)) . '"}';
}
// 向服务器发送请求
else if(socket_write($socket, $msg, strlen($msg)) === false) {
$out_str .= '"' . strerror(socket_last_error($socket)) . '"}';
}
else if(($out = socket_read($socket, 8192)) === false) {
$out_str .= '"' . strerror(socket_last_error($socket)) . '"}';
}
else {
$out_str = '{"is_ok":1,"data":' . $out . '}';
}
echo $out_str;
// 关闭socket
socket_close($socket);
/*------------------------------------------------------ */
//-- socket服务端
/*------------------------------------------------------ */
include('include/init.php');
// 设置时区
//date_default_timezone_set('Etc/GMT-8');
echo str_repeat(' ', 4000);
error_reporting(0);
set_time_limit(0);
ob_start();
// 显示提示信息
function show_tip($msg, $is_ok=true) {
if($is_ok) {
$msg = '<font color=\"#090\">' . $msg . '</font>';
} else {
$msg = '<font color=\"#f00\">' . $msg . '</font>';
}
echo '<script>parent.$("#tip").showTip("' . date('Y-m-d H:i:s', time()) . '","' . $msg . '");</script>';
ob_flush();
flush();
sleep(1);
}
// 获取socket服务端配置信息
$server_conf = get_server_config();
$ip = $server_conf->ip;
$port = (int)$server_conf->port;
$server_name = $server_conf->name;
show_tip($server_name . ' 正在初始化...');
// 创建socket
if(($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
show_tip($server_name . ' 创建失败,原因:' . strerror(socket_last_error()), false);
} else {
show_tip($server_name . ' 创建成功!');
}
// 绑定socket到指定IP,端口
if(socket_bind($socket, $ip, $port) === false) {
show_tip('绑定 ' . $server_name . ' 失败,原因:' . strerror(socket_last_error($socket)), false);
} else {
show_tip('绑定 ' . $server_name . ' 到 ' . $ip . ', ' . $port);
}
// 监听
if(socket_listen($socket, 5) === false) {
show_tip($server_name . ' 监听失败,原因:' . strerror(socket_last_error($socket)), false);
} else {
show_tip($server_name . ' 正在监听中...');
echo '<script>location.href="login.php";</script>';
ob_flush();
flush();
}
static $w_socket = null; // web
static $a_socket = null; // android
$rNodeDataModel = new NodeDataModel();
do {
if(($msg_socket = socket_accept($socket)) === false) {
socket_close($msg_socket);
break;
} else {
if(($buffer = socket_read($msg_socket, 8192)) !== false) {
$buffer = trim($buffer);
if($buffer == 'web') {
$w_socket = $msg_socket;
} else if($buffer == 'android') {
$a_socket = $msg_socket;
} else if($buffer != 'stop') {
$str_arr = explode('&', $buffer);
if(!empty($str_arr[1])) {
$c_name = trim($str_arr[0]); // 客户端标识
$c_data = trim($str_arr[1]); // 客户端数据
if($c_name == 'computer') {
// 判断数据是否为json格式
if(($r_arr = json_decode($c_data, true)) != null) {
if($w_socket != null) {
socket_write($w_socket, $c_data, strlen($c_data));
}
if($a_socket != null) {
socket_write($a_socket, $c_data, strlen($c_data));
}
// 添加到数据库
foreach($r_arr as $v) {
$v['node_id'] = $v['point'];
unset($v['point']);
$v['create_time'] = time();
$rNodeDataModel->insert($v);
}
}
}
}
socket_close($msg_socket);
} else {
socket_close($msg_socket);
}
} else {
socket_close($msg_socket);
}
}
} while($buffer != 'stop');
// 关闭socket
socket_close($w_socket);
socket_close($a_socket);
socket_close($socket);
function connect() {
$.ajax({
url: 'client.php?msg=web',
type: 'get',
dataType: 'json',
success: function(result) {//由服务器返回,并根据 dataType 参数进行处理后的数据;描述状态的字符串。
$('#tb tr:gt(0)').remove();//删除之前的数据
if(result.is_ok) {
var x = (new Date()).getTime();
$.each(result.data, function(i) {
var index = parseInt(result.data[i].point) - 1;
chart01.series[index].addPoint([x, parseFloat(result.data[i])], true, true);
chart02.series[index].addPoint([x, parseFloat(result.data[i])], true, true);
chart03.series[index].addPoint([x, parseFloat(result.data[i])], true, true);
chart04.series[index].addPoint([x, parseFloat(result.data[i])], true, true);
chart05.series[index].addPoint([x, parseFloat(result.data[i])], true, true);
chart06.series[index].addPoint([x, parseFloat(result.data[i])], true, true);
chart07.series[index].addPoint([x, parseFloat(result.data[i])], true, true);
chart08.series[index].addPoint([x, parseFloat(result.data[i])], true, true);
chart09.series[index].addPoint([x, parseFloat(result.data[i])], true, true);
chart10.series[index].addPoint([x, parseFloat(result.data[i])], true, true);
},1000);//这里的是隔时间自动取数据
} else {
error = true;
layer.alert(result.data);
}
},
complete: function(XHR, TS) {//请求完成后回调函数 (请求成功或失败之后均调用)。
XHR = null; // 释放XMLHttprequest对象
if(!error)
connect();
}
});
}
function create_data() {
var data = [],
time = (new Date()).getTime(),
i;
for (i = -19; i <= 0; i++) {
data.push({
x: time + i * 1000
});
}
return data;
}
var chart01, chart02, chart03, chart04, chart05, chart06, chart07,chart08,chart09,chart10;
function create_chart(id, t, y_t) {
var chart = new Highcharts.Chart({
chart: {
renderTo: id,
type: 'spline',
animation: Highcharts.svg,
backgroundColor: '#272735',
events: {
load: connect
}
},
title: {
text: t
},
xAxis: {
type: 'datetime',
tickPixelInterval: 150
},
yAxis: {
title: {
text: y_t
},
plotLines: [{//线
value: 0,
width: 1,
color: '#808080'
}]
},
tooltip: {
formatter: function() {
return '<b>'+ this.series.name +'</b><br/>'+
Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x);
}
},
series: [{
name: '实时数据',
data: [29.9, -71.5, 106.4, 15.2, 144.0, 258.0, 135.6, 177.5, 216.4, 194.1, 95.6, 54.4] //create_data()
}],
credits:{
enabled:false
}
});
return chart;
}
如何把取到的data数据赋给每个chart表,{"is_ok":1,"data":[13,56,89,5,21,64,79,51,46,31]},如何在series中的data表示出来。希望给一些实质的建议。谢谢