php项目中的二进制通讯怎么利用erlang实现?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
一般来说网络通讯常用的方式有两种:文本通讯和二进制通讯。php与erlang之间实现文本通讯比较简单,这里就不做讨论,本文主要讨论的是php与erlang实现二进制通讯的实现方法。实现步骤如下:
<强> erlang端代码:强>
模块(服务器)。 出口((启动/0))。 ——(使用UINT,大敌;32/unsigned-little-integer)。 ——(INT,大敌;32/signed-little-integer)。 ——(USHORT,大敌;16/unsigned-little-integer)。 ——(时间短,大敌;16/signed-little-integer)。 ——(UBYTE,大敌;8/unsigned-little-integer)。 ——(,字节,8/signed-little-integer)。 ——(,港口,5678)。
% %启动服务并接受客户端的连接
开始(),→ {好,,才能LSock},=, gen_tcp:听(?港口,,(二进制,,{包,,0},{活跃,,假})), io:才能格式(“socket 听:~ p 提醒~ p ~ n", [LSock,, ?港口]),,,接受(LSock) 接受(LSock),→ {好吧,,才能ASock},=, gen_tcp:接受(LSock), 产卵才能(有趣的(),→,server_loop (ASock),结束), ,接受(LSock)。 server_loop (ASock),→ case 才能;gen_tcp: recv (ASock, 0), ,,,{好,,& lt; & lt; Len: ? USHORT, Cmd: ? USHORT,包含:4/二进制单位:8祝辞祝辞,=,一},→ ,,,,,io:格式(“recv 数据:~ p ~ p ~ p ~ n",, (Len, Cmd,,包含]), ,,,,,% %将接收到数据发送回客户端 ,,,,,gen_tcp:发送(ASock,,), ,,,,,server_loop (ASock); ,,,{,,}数据,→ ,,,,,io:格式(“recv  unformated 数据:,~ p ~ n",,(数据)),,,,,,,server_loop (ASock); ,,,{错误,,_},→ ,,,,,{,,recv_error} ,才能结束。
<强> php端代码:强>
& lt; php ? 时间=美元timeout 3;//超时时间:3秒 fp 美元;=,fsockopen (“tcp://127.0.0.1",, 5678,, errno美元,errstr美元,美元超时/*,连接超时时间,*/); if (! $ fp), { ,echo “errstr 美元(美元errno) & lt; br /祝辞;\ n"; },{else ,stream_set_timeout (fp美元,,超时); ,//远程数据接收或发送超时时间=,美元format “vva4"; ,data 美元;=,包(格式,美元,4日,10001年,“abcd"); ,//data 美元;按照一定格式被打包成二进制数据 ,写入文件(fp美元,,数据); (!,if  feof (fp)美元),{ 时间=美元才能rs 从文件中读(fp美元,,1024);//读才能取远程数据 if 才能;(rs), { ,,len 美元;=,strlen (rs); ,,//len 美元;可以获取数据的长度,用以计算内容的长度 ,,//在这个例子中,content 的长度为,4 ,,format 美元;=,“vlen/vcmd/a4content"; ,,data 美元;=,解压缩(格式美元,,rs); ,,print_r(元数据); ,,},{else ,,echo “超时!“; ,,} ,}else { echo 才能“超时!“ ,} ,文件关闭(fp); } ?祝辞
运行正常的情况下,php端会显示以下内容:
Array (, (len)=祝辞,4,(cmd),=祝辞,10001,(内容),=祝辞,abcd )
针对通讯的一些<强>说明强>:
这里用到的是php的包函数和解压函数:
包函数:将数据按照一定格式打包成二进制数据,生成的数据接近C/c++的结构体数据(C/c++字符串带结束符)。
解包函数:与包装相反,对二进制数据进行解包。
对应的erlang端,则直接用位语法来匹配二进制数据即可。
关于php项目中的二进制通讯怎么利用erlang实现问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。