??? ??? ??? ??? ???? ???? ???? ??? ?? ??? ?? ???? ??? ?? ??????. ??? ??? ??? ?? ??? ????? WebSocket ????? ??? ??, ??? ?? ? ?? ?? ????? ??? ??? ??? ?? ?? ?????? ???? ????? ?????. ??? ? ????? WebSocket? ???? ??? ??? ???? ??? ??? ???.
PHP??? Swoole ??? ???? WebSocket ??? ??? ? ????. ??? Swoole? ???? ???? ?? ?? ??? ??? ?????. Swoole? ???? ?? ?? ???? ?? ?? ??? ????? ????.
??? ThinkPHP6?? WebSocket? ???? ??? ???????.
1. ?? ?? ??
ThinkPHP6?? WebSocket? ???? ?? topthink/thinker
?? ??? ???? ???. topthink/thinker
擴(kuò)展。
composer require topthink/thinker:dev-master
topthink/thinker
是一個(gè)命令行工具,用于在 ThinkPHP6 中運(yùn)行 PHP 代碼和管理異步任務(wù)。
2. 配置 WebSocket
我們需要在項(xiàng)目的配置文件 config/socket.php
中配置 WebSocket。
<?php return [ // WebSocket服務(wù)器地址,使用內(nèi)網(wǎng)穿透時(shí)填寫內(nèi)網(wǎng)地址 'server' => '127.0.0.1:9501', // WebSocket的應(yīng)用類,需要實(shí)現(xiàn) hinkworkerServer 接口 'worker_class' => 'appcontrollerWebSocket', ];
我們需要指定 server
的地址以及實(shí)現(xiàn) Server
接口的類 worker_class
,在這里我們將實(shí)現(xiàn) WebSocket 功能的控制器類命名為 WebSocket
,放在 appcontroller
目錄下。
3. 實(shí)現(xiàn) WebSocket
我們?cè)?appcontroller
目錄下創(chuàng)建一個(gè)名為 WebSocket
的控制器,在控制器中實(shí)現(xiàn) Server
接口。
<?php namespace appcontroller; use thinkworkerServer; class WebSocket implements Server { protected $socket = 'websocket://127.0.0.1:9501'; public function onMessage($connection, $data) { foreach ($this->worker->connections as $conn) { $conn->send('user ' . $connection->id . ' said: ' . $data); } } public function onConnect($connection) { echo "new connection from ip " . $connection->getRemoteIp() . " "; } public function onClose($connection) { echo "connection closed: " . $connection->id . " "; } public function onWorkerStart($worker) { // 初始化 } }
在 WebSocket
控制器類中,我們需要實(shí)現(xiàn) onMessage
、onConnect
、onClose
和 onWorkerStart
四個(gè)方法。
onMessage
: 當(dāng)客戶端發(fā)送數(shù)據(jù)時(shí),會(huì)觸發(fā)onMessage
方法,參數(shù)$connection
表示客戶端的連接對(duì)象,$data
表示客戶端發(fā)送的數(shù)據(jù)。onConnect
: 在客戶端連接的時(shí)候會(huì)觸發(fā)onConnect
方法,參數(shù)$connection
表示客戶端的連接對(duì)象。onClose
: 在客戶端斷開連接的時(shí)候會(huì)觸發(fā)onClose
方法,參數(shù)$connection
表示客戶端的連接對(duì)象。onWorkerStart
: 在工作進(jìn)程啟動(dòng)的時(shí)候會(huì)觸發(fā)onWorkerStart
方法,參數(shù)$worker
表示當(dāng)前工作進(jìn)程的對(duì)象。
4. 運(yùn)行 WebSocket
配置好 WebSocket 之后,我們可以使用 think
命令來(lái)啟動(dòng) WebSocket。
php think worker:start
上述命令會(huì)啟動(dòng)一個(gè) WebSocket 服務(wù),并在控制臺(tái)輸出運(yùn)行日志。
5. 測(cè)試 WebSocket
WebSocket 實(shí)現(xiàn)之后,我們可以使用 WebSocket 的客戶端進(jìn)行測(cè)試。我們可以使用 Chrome
瀏覽器并安裝 Simple WebSocket Client
插件來(lái)進(jìn)行測(cè)試。在插件中輸入 WebSocket 服務(wù)器的地址,點(diǎn)擊連接,即可開始使用 WebSocket 通信。
在 Simple WebSocket Client
rrreee
topthink/thinker
? ThinkPHP6?? PHP ??? ???? ??? ??? ???? ?? ??? ?????. 2. WebSocket ?????? ?? ?? config/socket.php
?? WebSocket? ???? ???. ??rrreee?? server
? ??? Server
?????? ???? worker_class
???? ???? ???. ???? ?? ???? ???? ??? ?????. WebSocket ??? ?????. ?? WebSocket
?? appcontroller
????? ????. ????3. WebSocket ?????? appcontroller
????? WebSocket
??? ????? ???? ????? Server
?????? ?????. ??rrreee?? WebSocket
???? ????? onMessage
, onConnect
, onClose
? ? ???? ???. onWorkerStart
? ?? ???. ??-
onMessage
: ?????? ???? ???onMessage
???? ??????.$connection
????? ?????? ???? ?????. ?? ??,$data
? ?????? ?? ???? ?????. -
onConnect
:onConnect
???? ?????? ??? ? ??????.$connection
????? ?????? ?? ??? ?????. . -
onClose
: ????? ??? ????onClose
???? ??????.$connection
????? ?????? ??? ?????. ??. -
onWorkerStart
:onWorkerStart
???? ??? ????? ??? ? ??????.$worker
????? ??? ?????. ?? ??? ????.
think
??? ???? WebSocket? ??? ? ????. ??rrreee??? ??? WebSocket ???? ???? ??? ?? ??? ?????. ????5. WebSocket ???????WebSocket? ??? ??? WebSocket ?????? ???? ???? ? ????. ???? ?? Chrome
????? ???? Simple WebSocket Client
????? ??? ? ????. ????? WebSocket ??? ??? ???? Connect? ???? WebSocket ??? ?????. ????Simple WebSocket Client
?? ??? ???? ??? ???? ????? ??? ?? ??? ???? WebSocket ??? ????? ???? ??? ? ? ????. ??????????? ???? ThinkPHP6?? WebSocket? ???? ??? ??????. WebSocket ????? ??? ??? ???? ?????? ?? ????? ?? ??????. ?? ????? WebSocket? ???? ??? ?? ??? ?? ??? ?? ???? ??? ??? ???? ? ????. ??? ??? ThinkPHP6?? WebSocket ????? ?? ?????. ??? ??? PHP ??? ????? ?? ?? ??? ?????!

? AI ??

Undress AI Tool
??? ???? ??

Undresser.AI Undress
???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover
???? ?? ???? ??? AI ?????.

Clothoff.io
AI ? ???

Video Face Swap
??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

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

settings.json ??? ??? ?? ?? ?? ?? ?? ??? ??? VSCODE ??? ??? ???? ? ?????. 1. ??? ?? ?? : Windows? C : \ Users \\ AppData \ Roaming \ Code \ User \ Settings.json, MacOS IS /users//library/applicationsupport/code/user/settings.json, linux? /home//.config/code/user/settings.json; 2. Workspace ?? ?? : .vscode/settings project root ????

DateTime.strpTime ()? ???? ?? ???? DateTime ??? ??????. 1. ?? ?? : "%y-%m-%d"? ?? DateTime ???? "2023-10-05"; 2. ?? ??? "%m/%d/%y", "%d/%m/%y", ?? ??? ?? ???? ?? "%b%d,%y%i :%m%p"? ?? ?? ??? ?????. 3. dateUtil.parser.parse ()? ???? ? ??? ??? ???? ?????. 4. ?? .D

?, ?? CSS ?? ?? ??? JavaScript??? ??? HTML ? CSS? ?? ??? ? ????. 1. ?? UL? Li? ???? ?? ??? ??????. 2. ?? ?? ???? ???? ?????? ???? ??? ???? ???; 3. ?? ?? : ?? Li? ???, ?? ??? ??? ???? ?????. ??; 4. ?? ??? ???? ??? : ??, ????????? : ???? ??; 5. ?? ?? ???? ??? ?? ????, ??? ????, ??? ? ?????? ???? ??? ????? ??? ???? ??? ? ????. ?? ???? ???? JavaScript ??? ???? ???? ??? ?????.

@Property Decorator? ??? ??, ?? ? ?? ??? ???? ?? ???? ???? ???? ? ?????. 1. ?? ?? : @property? ?? ?? ?? ??? ????, ?? ?? ??? ???? ???? ?? ????? ??; 2. ?? ?? : @name.setter ? @name.deleter? ???? ?? ?? ?? ? ?? ??? ?????. 3. ?? ?? ???? : BankAccount? ?? ???? ??? ??? ???? ??? ??? ??? ??????. 4. ?? ?? ?? : ?? ??? ????? ?? ??? ??? ??? ???? ?? ??? ??? ?? ?? ? ?? ??? ?????.

itertools.combinations? ?? ??? ???? ??? ?? ??? ???? ?? ? ?? ?? (?? ???)? ???? ? ?????. ???? ??? ????. 1. ?? ??? ??? ?? ( 'a', 'b'), ( 'a', 'c') ? ???? 2 ?? ?? ??? ?????. 2. ?? ??? ??? "ABC"? "ABD"? ?? ???? 3 ? ??? ???; 3. ? ??? ?? 1 5 = 6? ?? ?? ?? ??? ??? ?????. ?? ?? ??? ???????. ??? ??? ??? ??? ???? ??????, ??? AB? BA? ???? ???? ??, ??? ?? ??? ????.

Python? ETL ????? ???? ???? ?????. 1. ??? ?? : ??????, API, ?? ? ?? ???? Pandas, Sqlalchemy, ?? ? ?? ?????? ?? ???? ?? ? ? ????. 2. ??? ?? : ??, ?? ??, ???, ?? ? ?? ??? ??? ???? ??? ??? ???? ??? ??????. 3. ??? ?? : Pandas 'To_SQL ??? ?? ???? ??? SDK? ???? ?? ???? ???? ???? ?? ?? ? ?? ?????? ?????. 4. ?? ?? ?? : ?? ??, Dagster, Prefect? ???? ???? ? ??? ???? ?? ?? ? ?? ??? ???? ???? ?? ??? ??????.

???? ?? ?? ?? ?? ???? ?? ???? ???? ? ???? ?????. 1. @pytest.fixture ?????? ???? ???? ??????. 2. ??? ???? ???? ??? ???? ??; 3. ?? ?? ??? ?? ? ?? ??; 4. ??, ?? ?? ?? ?? ?? ??? ?? ?? ??; 5. ?? ???? Conftest.py? ???? ??? ?? ??? ???? ???? ?? ?? ? ??? ?? ??????.

UUID ??? ???? ?? ?????? ???? ??? ??? ??? ? ?? ???? ??? MAC ??? ?? UUID.getNode ()? ?? ?? ???? ??????. 2. ?? ????? ???? IPConfig ?? ifconfig? ?? ??? ??? ???? ?? ???? ?? MAC ??? ??? ? ??? ???? ?? ???? ?? ??? ????? ????? ?????. 3. ?? ????? GetMac? ???? ?? ? get_mac_address ()? ???? Mac? ???? ????? ?? IP? ??? ????? ?? ???? ?????. ???? ?? ?????? ???? ??? UUID ??? ?????. ?? ???? ?? ??? ???? ????? ?? ?? ???? ???? ???? ??? getma? ??? ? ????.
