MAC上 php中websocket的連線

2021-08-17 16:42:26 字數 1687 閱讀 8295

在安裝完php的socket擴充套件後就可以使用php自帶的各種socket函式了

先學習一下各個函式的相關引數和使用方法

比如我已經知道了乙個伺服器是可以通過websocket連線的 其網域名稱是192.168.15.192 埠號是9001

可用用打**的步驟理解socket的連線方式

1. ## 首先 打**時 連線雙方都要有**機; socket就要求雙方都有socket號 也就是網域名稱; 

$socket_create = socket_create($domain, $type, $protocal); ## 資源型別

$error = socket_last_error($socket_create); ## 如果連線成功則為int(0) 連線失敗會返回錯誤碼

$strerror = socket_strerror($error) ## 讀取錯誤的文字說明

## 放上官方說明這個函式的鏈結

## 第乙個引數$domain是指定套接字要使用的協議

可選這三種,我用的是第一種af_inet:

af_inet 基於ipv4的網際網路協議

af_inet6 ipv6基於internet的協議

af_unix 本地通訊協議

## 第二個引數$type是連線方式

可選這五種,我用的是第一種sock_stream:

sock_stream 提供順序的套接字 tcp協議基於此型別

sock_dgram 支援資料報 udp協議基於此型別

sock_seqpacket 為固定最大長度資料報提供有序傳輸 每次呼叫時讀取整個資料報

sock_raw 提供原始的網路協議訪問 可以使用者手動構建任何協議 常用於執行icmp請求(如終端ping請求)

sock_rdm 不保證排序可靠 

## 第三個引數$protocal是設定指定的特定協議domain; 可以呼叫getprotobyname($name)檢索值,$name 是string 可以是 "ip","icmp","ggp","tcp","egp","pup","udp","hmp","xns-idp","rdp","rvd",我用的是getprotobyname("tcp"),返回了6,對應的正是sol_tcp這個常量.

第三個引數應該就2種,我也不知道為什麼有那麼多$name:

sol_tcp ## 我就是用這個常量測試成功的

sol_udp ## 沒試過 請自行谷歌...

其他常量可以參考官方的常量定義手冊 

2. 向對方撥號呼叫; 相當於發出連線請求

$result = socket_connect($socket_create, "192.168.15.192", "9001");

## 三個引數 第乙個寫socket_create的資源 第二個寫網域名稱 第三個寫埠號

3. 讀取資訊

while($out = socket_read($create_socket, $length)){

var_dump($out);

## socket_read至少是2個引數

第乙個引數是create_socket資源

第二個引數寫你想要接收的資料長度 單位是位元組

第三個引數是型別 可以不寫 預設是php_binary_read這個常量

以上就是php連線websocket的方法.

但是在實際使用過程中,瀏覽器頁面經常無法正常讀取資訊.或許可以用swoole改進連線.

在mac上啟PHP服務

1 mac電腦自帶apache服務,所以無需重複安裝。可以通過命令檢視 php v 和 apachectl v 2 確保apache服務已啟動,可以檢視apache程序 ps ef grep httpd 3 可以使用命令 sudo apachectl start stop restart 4 然後以...

整理mac上的php環境

重灌了一下mb,重新編譯環境太麻煩了,所以整理一下mac系統自帶php環境用 os x yosemite 10.10.5 自帶apache,php 1,讓apache啟用php模組 找到loadmodule vhost alias module libexec apache2 mod vhost a...

mac上php的擴充套件yaf安裝

樓主的php是用brew安裝的,是php56,所以一開始樓主也想直接用brew安裝 brew install php56 yaf 結果一直安裝不了,提示網路連線不上 可能是自己的電腦設定的,糾結了好一段時間都沒有辦法,可能是要fq 不管了,只能用大招了,廢話少說,回到正題,用編譯的形式安裝 2 然後...