×

php设备通讯

php设备通讯(php接收设备tcp数据)

admin admin 发表于2023-03-24 02:52:07 浏览59 评论0

抢沙发发表评论

本文目录一览:

用PHP实现网页直接操作硬件串口

用PHP实现网页直接操作硬件串口,网页通过串口控制硬件设备、发送指令,读取返回值。

读取ec,php值效果

实现方案:

1.网页端通过websocket与php后台服务交互

2.php后台接收指令操作串口,发送16进制指令给硬件设备

3.php后台将硬件设备返回值通过websocket,传递给网页端

4.网页端接收推送消息,显示在页面上。

php客户端与服务器端怎么通讯啊?

要实时通讯,必须建立socket。

或者客户端每隔一段使用ajax主动向服务器获取指令

php怎么才能实现即时通讯?

如下:

php实现实时通信一般有两种方式:socket或comet。

socket是比较好的解决方案,问题在于不是所有的浏览器都兼容,服务器端实现起来也稍微有点麻烦。

comet(基于HTTP长连接的"服务器推")实现起来更加方便,而且兼容所有的浏览器。comet也有好几种实现方式,如iframe,httplongrequest等。

js用定时器周期性向服务器发送请求,模拟实时刷新。这里分长轮询和短轮询。

区别是:长轮询在没有数据更新时,不会立刻返回结果而是在服务器端hold住,直到有数据更新再返回结果。

短轮询无论数据是否有更新,都立刻返回结果。

这种做法服务器开销较大,2websokect,html5的新特性,可以在前后端建立双向通信

缺点是部分浏览器不支持。b/s架构的系统其实实现即使通信是比较有难度的,因为很难实现服务器推送

目前主流是用js轮询实现,但只要能通过代码减小服务器开销,也能达到比较好的效果。

怎样使用php实现tcp/udp通讯

1.在socket_bind的时候ip地址不能真回环地址如127.0.0.1

2.server.php后台跑起来的时候nohup php server.php /var/tmp/a.log 21

一: udp 方式

1) server.php

?php //error_reporting( E_ALL ); set_time_limit( 0 ); ob_implicit_flush(); $socket = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP ); if ( $socket === false ) { echo "socket_create() failed:reason:" . socket_strerror( socket_last_error() ) . "\n"; } $ok = socket_bind( $socket, '202.85.218.133', 11109 ); if ( $ok === false ) { echo "socket_bind() failed:reason:" . socket_strerror( socket_last_error( $socket ) ); } while ( true ) { $from = ""; $port = 0; socket_recvfrom( $socket, $buf,1024, 0, $from, $port ); echo $buf; usleep( 1000 ); } ? -php设备通讯

2) client.php

?php $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); $msg = 'hello'; $len = strlen($msg); socket_sendto($sock, $msg, $len, 0, '202.85.218.133', 11109); socket_close($sock); ? -php设备通讯

二: TCP 方式

1)server.php

?php //error_reporting( E_ALL ); set_time_limit( 0 ); ob_implicit_flush(); $socket = socket_create( AF_INET, SOCK_STREAM, SOL_TCP ); socket_bind( $socket, '192.168.2.143', 11109 ); socket_listen($socket); $acpt=socket_accept($socket); echo "Acpt!\n"; while ( $acpt ) { $words=fgets(STDIN); socket_write($acpt,$words); $hear=socket_read($acpt,1024); echo $hear; if("bye\r\n"==$hear){ socket_shutdown($acpt); break; } usleep( 1000 ); } socket_close($socket) ? -php设备通讯

2) client.php

?php $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); $con=socket_connect($socket,'192.168.2.143',11109); if(!$con){socket_close($socket);exit;} echo "Link\n"; while($con){ $hear=socket_read($socket,1024); echo $hear; $words=fgets(STDIN); socket_write($socket,$words); if($words=="bye\r\n"){break;} } socket_shutdown($socket); socket_close($sock); ?-php设备通讯

nginx和php的两种通信方式

Nginx与PHP的两种通信方式-unix socket和tcp socket

1、两者Nginx配置

unix socket

需要在nginx配置文件中填写php-fpm运行的pid文件地址。

location ~ \.php$ {

    include fastcgi_params;

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;;

    fastcgi_pass unix:/var/run/php5-fpm.sock;

    fastcgi_index index.php;

}

tcp socket

需要在nginx配置文件中填写php-fpm运行的ip地址和端口号。

location ~ \.php$ {

    include fastcgi_params;

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;;

    fastcgi_pass 127.0.0.1:9000;

    fastcgi_index index.php;

}

2、两者比较

从上面的图片可以看,unix socket减少了不必要的tcp开销,而tcp需要经过loopback,还要申请临时端口和tcp相关资源。但是,unix socket高并发时候不稳定,连接数爆发时,会产生大量的长时缓存,在没有面向连接协议的支撑下,大数据包可能会直接出错不返回异常。tcp这样的面向连接的协议,多少可以保证通信的正确性和完整性。-php设备通讯

3、选择建议:如果是在同一台服务器上运行的nginx和php-fpm,并发量不超过1000,选择unix socket,因为是本地,可以避免一些检查操作(路由等),因此更快,更轻。 如果面临高并发业务,我会选择使用更可靠的tcp socket,以负载均衡、内核优化等运维手段维持效率。-php设备通讯