<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 記事が始まる前のコンテンツの一部</span></span><span>
</span><span><span class="hljs-comment">// 記事の主題に関係のないコードまたはコメント</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>
----------------------------------------------
</span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 記事が始まります</span></span><span>
<span class="hljs-comment">/**
* 使い方 socket_set_option 設定 socket ネットワークの安定性を最適化するための再送信の数
*
* ネットワークプログラミングで,socket これは非常に一般的なコミュニケーションメカニズムです,さまざまなプロセスまたはデバイスがネットワーク上でデータを交換できるようにします。使用中 socket ネットワーク通信を実施するとき,トランスミッションの安定性は重要な考慮事項です,特に不安定なまたは高レイテンシのネットワーク環境で。ネットワーク通信の信頼性を向上させるため,我们可以通过設定 socket ネットワークの安定性を最適化するための再送信の数。
*
* 本文将介绍使い方 PHP 社内 `socket_set_option` 函数設定 socket 再送信の数,ネットワーク接続の安定性を改善するため。
*/</span>
</span><span><span class="hljs-comment">// aを作成します TCP socket</span></span><span>
</span><span><span class="hljs-variable">$socket</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_create</span></span><span>(AF_INET, SOCK_STREAM, SOL_TCP);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$socket</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"作成する socket 失敗: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">socket_strerror</span></span><span>(</span><span><span class="hljs-title function_ invoke__">socket_last_error</span></span><span>()) . </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>();
}
</span><span><span class="hljs-comment">// 宛先アドレスとポートに接続します</span></span><span>
</span><span><span class="hljs-variable">$address</span></span><span> = </span><span><span class="hljs-string">'127.0.0.1'</span></span><span>;
</span><span><span class="hljs-variable">$port</span></span><span> = </span><span><span class="hljs-number">12345</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">socket_connect</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>, </span><span><span class="hljs-variable">$address</span></span><span>, </span><span><span class="hljs-variable">$port</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"连接失敗: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">socket_strerror</span></span><span>(</span><span><span class="hljs-title function_ invoke__">socket_last_error</span></span><span>()) . </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>();
}
</span><span><span class="hljs-comment">// 設定 socket オプション</span></span><span>
</span><span><span class="hljs-comment">// 这里我们設定 SO_RCVBUF そして SO_RCVBUF 重传次数相关的オプション</span></span><span>
</span><span><span class="hljs-variable">$transmit_retries</span></span><span> = </span><span><span class="hljs-number">5</span></span><span>; </span><span><span class="hljs-comment">// 設定重传次数为 5</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">socket_set_option</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>, SOL_SOCKET, SO_RCVBUF, </span><span><span class="hljs-number">65536</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"設定接收缓冲区失敗: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">socket_strerror</span></span><span>(</span><span><span class="hljs-title function_ invoke__">socket_last_error</span></span><span>()) . </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>();
}
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">socket_set_option</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>, SOL_SOCKET, SO_RCVBUF, </span><span><span class="hljs-variable">$transmit_retries</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"設定重传次数失敗: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">socket_strerror</span></span><span>(</span><span><span class="hljs-title function_ invoke__">socket_last_error</span></span><span>()) . </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>();
}
</span><span><span class="hljs-comment">// データを送信します</span></span><span>
</span><span><span class="hljs-variable">$message</span></span><span> = </span><span><span class="hljs-string">"Hello, this is a test message!"</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">socket_write</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>, </span><span><span class="hljs-variable">$message</span></span><span>, </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$message</span></span><span>));
</span><span><span class="hljs-comment">// 閉鎖 socket</span></span><span>
</span><span><span class="hljs-title function_ invoke__">socket_close</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>);
</span><span><span class="hljs-comment">// 記事テキストの終わり</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>
----------------------------------------------
</span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 記事が終了した後のコンテンツ</span></span><span>
</span><span><span class="hljs-comment">// 任意のエンドマークまたはコメント</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>