php 与 erlang 实现二进制通信
php 与 erlang 实现二进制通讯
网络通讯常用的有2种:文本通讯和二进制通讯。php与erlang之间文本通讯比较简单,这里不做讨论,主要讨论php与erlang实现二进制通讯。
通讯示例
erlang端代码:
-module(server). -export([start/0]). -define( UINT, 32/unsigned-little-integer). -define( INT, 32/signed-little-integer). -define( USHORT, 16/unsigned-little-integer). -define( SHORT, 16/signed-little-integer). -define( UBYTE, 8/unsigned-little-integer). -define( BYTE, 8/signed-little-integer). -define( PORT, 5678). %% 启动服务并接受客户端的连接 start() -> {ok, LSock} = gen_tcp:listen(?PORT, [binary, {packet, 0},{active, false}]), io:format("socket listen: ~p on ~p ~n",[LSock, ?PORT]), accept(LSock). accept(LSock) -> {ok, ASock} = gen_tcp:accept(LSock), spawn(fun() -> server_loop(ASock) end), accept(LSock). server_loop(ASock) -> case gen_tcp:recv(ASock, 0) of {ok, > = A} -> io:format("recv data: ~p ~p ~p~n", [Len, Cmd, Contain]), %%将接收到数据发送回客户端 gen_tcp:send(ASock, A), server_loop(ASock); {ok, Data} -> io:format("recv unformated data: ~p~n", [Data]), server_loop(ASock); {error, _} -> {ok, recv_error} end.
php端代码:
<?php $timeout = 3; //超时时间:3秒 $fp = fsockopen("tcp://127.0.0.1", 5678, $errno, $errstr, $timeout/* 连接超时时间 */); if (!$fp) { echo "$errstr ($errno)<br />\n"; } else { stream_set_timeout($fp, $timeout); //远程数据接收或发送超时时间 $format = "vva4"; $data = pack($format, 4, 10001, "abcd"); //$data 按照一定格式被打包成二进制数据 fwrite($fp, $data); if (!feof($fp)) { $rs = fread($fp, 1024); //读取远程数据 if ($rs) { $len = strlen($rs); //$len 可以获取数据的长度,用以计算content的长度 //在这个例子中,content 的长度为 4 $format = "vlen/vcmd/a4content"; $data = unpack($format, $rs); print_r($data); } else { echo "timeout!"; } } else { echo "timeout!"; } fclose($fp); } ?>
正常情况下php端会显示以下内容:
Array ( [len] => 4 [cmd] => 10001 [content] => abcd )
通讯说明
这里用到的是php的pack函数和unpack函数
pack函数:将数据按照一定格式打包成二进制数据,生成的数据接近C/C++的结构体(C/C++字符串带结束符)。
unpack函数:与pack相反,对二进制数据进行解包。
而erlang端,直接用位语法来匹配二进制数据即可

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



keepalive_timeouthttp mempunyai mod keepalive, yang memberitahu pelayan web untuk memastikan sambungan TCP terbuka selepas memproses permintaan. Jika ia menerima permintaan lain daripada klien, pelayan akan menggunakan sambungan tidak tertutup ini tanpa membuat sambungan lain. httpkeep-alive, setiap permintaan pada halaman web ialah http (gambar, css, dll.), dan untuk membuka permintaan http, anda mesti mewujudkan sambungan tcp terlebih dahulu Jika halaman perlu membuka dan menutup sambungan tcp untuk setiap permintaan , ia akan dijadikan sumber Pembaziran keepalive_timeout ialah apabila permintaan http selesai, sambungan tcpnya akan kekal

Ramai pengguna akan mengalami skrin biru selepas menaik taraf sistem win11, seperti: clockwatchdogtimeout blue screen, jadi bagaimana untuk menyelesaikannya? Pengguna boleh mengemas kini pemandu atau menyemak masalah terlalu panas, dsb. Biarkan laman web ini dengan teliti memperkenalkan kepada pengguna penyelesaian kepada skrin biru win11 clockwatchdogtimeout. Penyelesaian kepada clockwatchdogtimeout blue screen win11 1. Kemas kini pemacu: Mengemas kini pemacu CPU dan motherboard boleh menyelesaikan masalah. Anda boleh memuat turun pemacu terkini dengan melawati tapak web pengilang. 2. Semak isu terlalu panas: Terlalu panas juga mungkin salah satu punca ralat ini.

Dalam pembangunan aplikasi Vue, menggunakan vue-resource untuk membuat permintaan HTTP adalah operasi biasa. Walaupun vue-resource menyediakan banyak fungsi yang mudah, kadangkala kami menghadapi mesej ralat seperti "Ralat: timeoutofxxxmsexceeded". Ralat ini biasanya disebabkan oleh tamat masa permintaan. Jadi, dalam kes ini, bagaimana kita harus menyelesaikan masalah ini? 1. Tingkatkan tamat masa permintaan Pertama, kita boleh meningkatkan masa tamat permintaan sebanyak

Apakah yang perlu saya lakukan jika "Ralat: timeoutofxxxmsexceeded" berlaku apabila menggunakan axios dalam aplikasi Vue? Dengan perkembangan pesat Internet, teknologi bahagian hadapan sentiasa dikemas kini dan diulang Sebagai rangka kerja bahagian hadapan yang sangat baik, Vue telah dialu-alukan oleh semua orang sejak beberapa tahun kebelakangan ini. Dalam aplikasi Vue, kita selalunya perlu menggunakan axios untuk membuat permintaan rangkaian, tetapi kadangkala ralat "Ralat: timeoutofxxxmsexceeded" berlaku.

define mentakrifkan makro berbilang baris dengan menggunakan `\` untuk membahagikan `do { \ printf("%d\n", x } manakala (0)` kepada berbilang baris untuk definisi. Dalam takrifan makro, sengkang ke belakang `\` mestilah aksara terakhir takrifan makro dan tidak boleh diikuti dengan ruang atau ulasan. Apabila menggunakan `\` untuk kesinambungan baris, berhati-hati untuk memastikan kod boleh dibaca dan pastikan terdapat `\` di hujung setiap baris.

Kepentingan dan peranan fungsi define dalam PHP 1. Pengenalan asas kepada fungsi define Dalam PHP, fungsi define ialah fungsi utama yang digunakan untuk menentukan pemalar tidak akan mengubah nilainya semasa menjalankan program. Pemalar yang ditakrifkan menggunakan fungsi define boleh diakses di seluruh skrip dan bersifat global. 2. Sintaks fungsi define Sintaks asas fungsi define adalah seperti berikut: define("constant name","constant value&qu

Penyelesaian untuk tamat masa 504: 1. Semak beban pelayan; 2. Optimumkan pertanyaan dan kod; . Menyelesaikan masalah 9. Tambah cache; Menyelesaikan ralat ini selalunya memerlukan gabungan faktor, termasuk prestasi pelayan, sambungan rangkaian, konfigurasi pelayan proksi dan pengoptimuman aplikasi.

defineKompilasi bersyarat boleh dicapai menggunakan arahan prapemprosesan `#ifdef`, `#ifndef`, `#if`, `#elif`, `#else` dan `#endif`.
