ホームページ >バックエンド開発 >PHPチュートリアル >PHP ソケットサーバー_PHP チュートリアル

PHP ソケットサーバー_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:53:131384ブラウズ



01
02
if (php_sapi_name() != 'cli') {
03
exit("cli を実行");
04
}
05

06
# php.ini の error_reporting 設定は生死を左右します
07
# while(true) は激しすぎるため、ログの書き込みに高い IO が占有されます
08
//ini_set('error_reporting', E_ERROR);
09
//ini_set('display_errors', 0);
10
set_time_limit(0);
11

12
# ログファイル
13
$recvfile = './recv.txt';
14

15
#ハートビートマーク
16
$heartag = "rn";
17

18
#配列の長さ
19
$datalen = 1024 * 1024;
20

21
$ip = '192.168.125.233';
22
$ポート = 12345;
23

24
# IPv4、ストリーミング、TCP
25
$sockect =socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
26
# サーバーをバインドするために必要です
27
if (!socket_bind($sockect, $ip, $port)) {
28
exit("ソケットのバインドに失敗しました");
29
}
30

31
#モニター
32
ソケットリッスン($sockect);
33
#ブロック禁止
34
socket_set_nonblock($sockect);
35

36
$clients = array();
37

38
while (true) {
39
#クライアント接続を受信します
40
$client =ソケット_accept($sockect);
41
if (is_resource($client)) {
42
#心拍数をトリガー
43
socket_write($client, $heartag, strlen($heartag));
44
$clients[] = $client;
45
printf("クライアントインデックス:%dn", count($clients));
46
}
47
unset($client);
48

49
if (!empty($clients)) {
50
foreach ($clients AS $idx => &$client) {
51
if (is_resource($client)) {
52
$recvstr = '';
53
# クライアントデータを受信する 注: 4 番目のパラメーターはゼロでなければなりません。これはマニュアルと異なり、まだ理解していません
54
If (socket_recv($client, $recvstr, $datalen, 0) === 0) {
55
socket_close($client);
56
socket_shutdown($client);
57
unset($clients[$idx]);
58
続けてください;
59
}
60

61
If ($recvstr == $heartag) {
62
# ハートビートをトリガーする
63
socket_write($client, $heartag, strlen($heartag));
64
elseif (trim($recvstr) != "") {
65
# 受信したメッセージを出力します
66
$stdmsg = sprintf("%d:%sn", $idx, $recvstr);
67
File_put_contents($recvfile, $stdmsg, FILE_APPEND);
68
エコー $stdmsg;
69
}
70
}
71
unset($recvstr, $idx);
72
}
73
}
74
#どれくらい寝たいですか?これは問題です、スリープしないとCPUが非常に疲れてメモリが食われてしまいます
75
usleep(50000);
76
}
77

78
ソケットクローズ($sockect);
79
ソケットシャットダウン($sockect);
80
?>
作者: oodbqpoo

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/478071.html技術記事 01 ?php 02 if (php_sapi_name() != cli) { 03 exit(run cli); 05 06 # php.ini の error_reporting 設定は生死を左右します 07 # while(true) が激しすぎるため、ログを書き込むとエラーが発生します高いスペースを取る...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。