亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

? php教程 php手冊 php使用websocket示例詳解

php使用websocket示例詳解

May 15, 2018 pm 05:42 PM
websocket ?? ? ??

這篇文章主要介紹了php使用websocket示例,需要的朋友可以參考下

下面我畫了一個圖演示 client 和 server 之間建立 websocket 連接時握手部分,這個部分在 node 中可以十分輕松的完成,因為 node 提供的 net 模塊已經(jīng)對 socket 套接字做了封裝處理,開發(fā)者使用的時候只需要考慮數(shù)據(jù)的交互而不用處理連接的建立。而 php 沒有,從 socket 的連接、建立、綁定、監(jiān)聽等,這些都需要我們自己去操作,所以有必要拿出來再說一說。

php使用websocket示例詳解

① 和 ② 實際上就是一個 HTTP 的請求和響應(yīng),只不過我們在處理的過程中我們拿到的是沒有經(jīng)過解析的字符串。如:

復(fù)制代碼 代碼如下:

GET /chat HTTP/1.1
Host: server.example.com
Origin:

我們往??吹降恼埱笫沁@個樣子,當(dāng)這東西到了服務(wù)器端,我們可以通過一些代碼庫直接拿到這些信息。

一、php 中處理 websocket

WebSocket 連接是由客戶端主動發(fā)起的,所以一切要從客戶端出發(fā)。第一步是要解析拿到客戶端發(fā)過來的 Sec-WebSocket-Key 字符串。

復(fù)制代碼 代碼如下:

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin:
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13

client 請求的格式

首先 php 建立一個 socket 連接,監(jiān)聽端口的信息。

1. socket 連接的建立

關(guān)于 socket 套接字的建立,相信很多大學(xué)修過計算機網(wǎng)絡(luò)的人都知道了,下面是一張連接建立的過程:

復(fù)制代碼 代碼如下:

// 建立一個 socket 套接字
$master = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($master, SOL_SOCKET, SO_REUSEADDR, 1);
socket_bind($master, $address, $port);
socket_listen($master);

相比 node,這個地方的處理實在是太麻煩了,上面幾行代碼并未建立連接,只不過這些代碼是建立一個 socket 套接字必須要寫的東西。由于處理過程稍微有復(fù)雜,所以我把各種處理寫進了一個類中,方便管理和調(diào)用。

復(fù)制代碼 代碼如下:

//demo.php
Class WS {
??? var $master;? // 連接 server 的 client
??? var $sockets = array(); // 不同狀態(tài)的 socket 管理
??? var $handshake = false; // 判斷是否握手

??? function __construct($address, $port){
??????? // 建立一個 socket 套接字
??????? $this->master = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)??
??????????? or die("socket_create() failed");
??????? socket_set_option($this->master, SOL_SOCKET, SO_REUSEADDR, 1)?
??????????? or die("socket_option() failed");
??????? socket_bind($this->master, $address, $port)???????????????????
??????????? or die("socket_bind() failed");
??????? socket_listen($this->master, 2)??????????????????????????????
??????????? or die("socket_listen() failed");

??????? $this->sockets[] = $this->master;

??????? // debug
??????? echo("Master socket? : ".$this->master."\n");

??????? while(true) {
??????????? //自動選擇來消息的 socket 如果是握手 自動選擇主機
??????????? $write = NULL;
??????????? $except = NULL;
??????????? socket_select($this->sockets, $write, $except, NULL);

??????????? foreach ($this->sockets as $socket) {
??????????????? //連接主機的 client
??????????????? if ($socket == $this->master){
??????????????????? $client = socket_accept($this->master);
??????????????????? if ($client < 0) {
// debug
echo "socket_accept() failed";
continue;
} else {
//connect($client);
array_push($this->sockets, $client);
??????????????????????? echo "connect client\n";
??????????????????? }
??????????????? } else {
??????????????????? $bytes = @socket_recv($socket,$buffer,2048,0);
??????????????????? if($bytes == 0) return;
??????????????????? if (!$this->handshake) {
??????????????????????? // 如果沒有握手,先握手回應(yīng)
??????????????????????? //doHandShake($socket, $buffer);
??????????????????????? echo "shakeHands\n";
??????????????????? } else {
??????????????????????? // 如果已經(jīng)握手,直接接受數(shù)據(jù),并處理
??????????????????????? $buffer = decode($buffer);
??????????????????????? //process($socket, $buffer);
??????????????????????? echo "send file\n";
??????????????????? }
??????????????? }
??????????? }
??????? }
??? }
}

上面這段代碼是經(jīng)過我調(diào)試了的,沒太大的問題,如果想測試的話,可以在 cmd 命令行中鍵入 php /path/to/demo.php;當(dāng)然,上面只是一個類,如果要測試的話,還得新建一個實例。

復(fù)制代碼 代碼如下:

$ws = new WS('localhost', 4000);

客戶端代碼可以稍微簡單點:

復(fù)制代碼 代碼如下:

? ????? ??
? ?? ??? ????? ???? ??? ??????, ???? ?????? ????. ? ???? ?? ???? ?? ??? ?? ????. ???? ??? ???? ???? ??? ?? admin@php.cn?? ?????.

? AI ??

Undresser.AI Undress

Undresser.AI Undress

???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover

AI Clothes Remover

???? ?? ???? ??? AI ?????.

Video Face Swap

Video Face Swap

??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

???

??? ??

???++7.3.1

???++7.3.1

???? ?? ?? ?? ???

SublimeText3 ??? ??

SublimeText3 ??? ??

??? ??, ???? ?? ????.

???? 13.0.1 ???

???? 13.0.1 ???

??? PHP ?? ?? ??

???? CS6

???? CS6

??? ? ?? ??

SublimeText3 Mac ??

SublimeText3 Mac ??

? ??? ?? ?? ?????(SublimeText3)

???

??? ??

??? ????
1597
29
PHP ????
1488
72
???
foobar2000? ??? ???????? - foobar2000 ??? foobar2000? ??? ???????? - foobar2000 ??? Mar 18, 2024 am 10:58 AM

foobar2000? ???? ?? ???? ?? ? ?? ????????. ?? ??? ??? ??? ??? ?????. ?? ????? ??? ??? ???? ?? ????? ??? ?? ??? ?? ? ????. ????? ?? ???? ?????. ? ??? ?? ???? ???? ?? ?? ??? ?????. ????? ???? ???? ???? ???? ????. ?? ??? ??? ??? ????, ??? ???? ?? ??? ?????, ??? ??? ??? ??? ???? ?? ?? ????? ?????. ?? ??? ???? ??? ?? ??? ?????. ??? ???? ?? ?? ??? ????? ??? ?? ??? ?? ??????. ??? ?? ????

?????????? ?? ????????? -?????????? ??? ?????? ?????????? ?? ????????? -?????????? ??? ?????? Mar 18, 2024 pm 02:58 PM

CrystalDiskMark? ?? ? ??? ??/?? ??? ??? ???? ?? ????? ?? HDD ???? ?????. ???? ?????? CrystalDiskMark ??? crystaldiskmark ???? ???????~ 1. CrystalDiskMark ?? CrystalDiskMark? ??? ?? ????? ??? ???? ????(SSD)? ?? ? ?? ??? ??? ???? ? ?? ???? ??? ?? ??? ?????. ). ??? I/O ??. ?? Windows ?? ?????? ??? ???? ?????? ??? ??? ??? ???? ?? ???? ??? ??? ??? ???? ???? ??? ?? ?????.

Baidu Netdisk ? ?? ?? Baidu Netdisk ? ?? ?? Mar 27, 2024 pm 06:46 PM

??? ???? ????? ??? ?? ??? ??? ???? ? ? ??? ?????. ?? ??? ???? ???? ??? ? ??? Baidu Netdisk? ??? ???? ??, ???? ?? ?? ? ??? ?? ???? ?? ???? ??? ?????. ??? ??? ????, ??? ????, ????? ???? ????, ??? ?? ?? ?? Baidu Cloud Disk? ??? ??? ??? ? ????. ??? ?? ???? Baidu Netdisk ?? ???? ?? ??? ???? ?? ? ???? ? ??????? Baidu Netdisk ? ?? ??? ??? ?????. Baidu ???? ???? ??? ?? ??: 1. ?? ?? Baidu Cloud ?????? ?????? ??? ? ??? ?? ?? ??? ??????.

BTCC ????: BTCC ???? MetaMask ??? ????? ???? ??? ?????? BTCC ????: BTCC ???? MetaMask ??? ????? ???? ??? ?????? Apr 26, 2024 am 09:40 AM

MetaMask(???? Little Fox Wallet???? ?)? ???? ??? ?? ??? ?? ????????. ?? BTCC? MetaMask ??? ?? ???? ?????. ??? ? MetaMask ??? ???? ??? ????? ??? ???? ??? ??? ? ??? ? ????? 20 USDT ??? ???? ?? ? ????. BTCCMetaMask ?? ??????? MetaMask ?? ? ?? ??, BTCC?? Little Fox ??? ????? ???? ??? ??? ?????. MetaMask ???? ?????? 3?? ? ??? ???? ??? MetaMask Little Fox Wallet? ??? ?? ?? ?? ???? ?? ? ?????. ??? ??? ? ??? ???? ????? ??? ? ????.

NetEase ???? ???? ???? ?? NetEase ???? ???? ???? ?? Mar 27, 2024 pm 05:32 PM

NetEase Mailbox? ?? ????? ?? ???? ??? ???, ????? ???? ???? ?? ????? ??? ?? ????. NetEase Mailbox Master? ??? ???? ?? ??? ??? ??? ?????? ??? ??? ? ?? ????? ?? ????? ??? ??? ?? ???? ????. ??? NetEase Mailbox Master? ???? ??? ? ??? ???? ???? ? ???? ???? ??? ??? ???? ??? ?? ????! ??, ??? ?????? NetEase Mailbox Master ?? ???? ?????? ? ????. App Store ?? Baidu Mobile Assistant?? "NetEase Mailbox Master"? ??? ? ??? ?? ?????. ???? ? ??? ???? NetEase ??? ??? ?? ??????. ??? ?????? ??? ????.

Win11?? ??? ??? ?? ??? ?? ??? ?? Win11?? ??? ??? ?? ??? ?? ??? ?? Mar 08, 2024 pm 03:06 PM

Windows ?? ??? ???? ?? ?? ?? ?? ?? ? ????, ??? ??? Win11? ?? ??? ?????. Win11 ????? ??? ??? ?? ?? ???? ????? ? ?? ??? ??? ??? ? ??? ?? ??? ?????. ?? ???? Win11 ????? ??? ??? ?? ??? ??? ????? ???? ??? ??? ???????. Win11 ????? ??? ??? ?? ???? ??? ???? ? ?? ???? ????. ?? ???? ?? ???? ?? ?? ?? ??? ????.

Oracle SQL? ??? ??? ?? ??? ?? Oracle SQL? ??? ??? ?? ??? ?? Mar 10, 2024 am 09:51 AM

OracleSQL? ??? ??? ?? ??? ?? OracleSQL?? ??? ??? ? ??? ?? ??? ???? ? ???? ????? ??? ?? ?????. ???? ?????? ??? ?? ????? OracleSQL?? ??? ??? ???? ???? ?? ?????? ????? ???? ?? ? ?????. ? ????? OracleSQL? ??? ?? ?? ??? ??? ???? ??? ??? ? ?? ?? ?? ??? ?????. 1. OracleSQL? Division ??

Xiaomi Auto ? ?? ?? Xiaomi Auto ? ?? ?? Apr 01, 2024 pm 09:19 PM

Xiaomi ??? ?????? ?? ??? ?? ??? ???? ???? ????? ???? ?? ??? ?? ??? ?? ??, ?? ??? ??, ??? ???? ???? ???? ??? ??? ???? ??? ? ????. ??? ? ?????? ???? ??? ?? ?? ?????. Xiaomi Auto ? ?? ? ?? ??? ?? ?? 1. Xiaomi Auto ?? 3? 25? Apple AppStore? ?????? ?? Android ???? ? ????? ????? ? ????. ??? ??: Xiaomi Auto? ?? ??? ?? ?? ??? ?????. , ?? ??? ?? Xiaomi ??? ?? ? ???? ?? ?? ?? ??? ??? ??? ?????. 3. ????: Xiaomi Auto ??? ??? ????, ??? ??? ????, ?? ??? ??? ?????. 4. ??? ??: ???? ?? ??, ?? ??, ??? ??, ???? ?????.

See all articles