php收藏本站代碼(php實(shí)現(xiàn)收藏功能)
php的socket編程算是比較難以理解的東西吧,不過,我們只要理解socket幾個函數(shù)之間的關(guān)系,以及它們所扮演的角色,那么理解起來應(yīng)該不是很難了,在筆者看來,socket編程,其實(shí)就是建立一個網(wǎng)絡(luò)服務(wù)的客戶端和服務(wù)端,這和mysql的客戶端和服務(wù)端是一樣的,你只要理解mysql的客戶端和服務(wù)端是怎么一回事,你就應(yīng)該能夠理解下面我要講的東西吧。
關(guān)于socket編程所涉及到的網(wǎng)絡(luò)協(xié)議,什么TCP啊,UDP啊,什么socket三次握手等等,這些網(wǎng)絡(luò)協(xié)議網(wǎng)上有很詳細(xì)的解釋,這里不講,只截個socket建立套接的過程圖:
socket是怎么建立連接的呢?上面已經(jīng)提到過了,它建立連接的過程是與mysql的客戶端和服務(wù)端的連接本質(zhì)是一樣的。而它與mysql不同的是,mysql的服務(wù)端和客戶端都已經(jīng)為我們編輯好了,我們只要應(yīng)用就行了。但是,關(guān)鍵時(shí)刻來啦,socket它什么東西都沒有提供給我們,唯一提供給我們的就是:幾十個socket函數(shù)。
socket的關(guān)鍵函數(shù)1:socket_create($net參數(shù)1,$stream參數(shù)2,$protocol參數(shù)3)
作用:創(chuàng)建一個socket套接字,說白了,就是一個網(wǎng)絡(luò)數(shù)據(jù)流。
返回值:一個套接字,或者是false,參數(shù)錯誤發(fā)出E_WARNING警告
socket_create創(chuàng)建并返回一個套接字,也稱作一個通訊節(jié)點(diǎn)。一個典型的網(wǎng)絡(luò)連接由 2 個套接字構(gòu)成,一個運(yùn)行在客戶端,另一個運(yùn)行在服務(wù)器端。
上面一句話是從php在線手冊那里復(fù)制過來的??吹?jīng)]有,這里說得意思是不是和我上面反反復(fù)復(fù)提到的客戶端與服務(wù)端一模一樣?呵呵。
參數(shù)1是:網(wǎng)絡(luò)協(xié)議,
網(wǎng)絡(luò)協(xié)議有哪些?它的選擇項(xiàng)就下面這三個:
AF_INET:IPv4 網(wǎng)絡(luò)協(xié)議。TCP 和 UDP 都可使用此協(xié)議。一般都用這個,你懂的。
展開全文
AF_INET6:IPv6 網(wǎng)絡(luò)協(xié)議。TCP 和 UDP 都可使用此協(xié)議。
AF_UNIX: 本地通訊協(xié)議。具有高性能和低成本的 IPC(進(jìn)程間通訊)。
參數(shù)2:套接字流,選項(xiàng)有:
SOCK_STREAMSOCK_DGRAMSOCK_SEQPACKETSOCK_RAWSOCK_RDM。
這里只對前兩個進(jìn)行解釋:
SOCK_STREAMTCP 協(xié)議套接字。
SOCK_DGRAMUDP協(xié)議套接字。
參數(shù)3:protocol協(xié)議,選項(xiàng)有:SOL_TCP:TCP 協(xié)議。SOL_UDP:UDP協(xié)議。
從這里可以看出,其實(shí)socket_create函數(shù)的第二個參數(shù)和第三個參數(shù)是相關(guān)聯(lián)的。
比如,假如你第一個參數(shù)應(yīng)用IPv4協(xié)議:AF_INET,然后,第二個參數(shù)應(yīng)用的是TCP套接字:SOCK_STREAM,
那么第三個參數(shù)必須要用SOL_TCP,這個應(yīng)該不難理解。
TCP 協(xié)議套接字嘛,當(dāng)然只能用TCP協(xié)議了,是不是?如果你應(yīng)用UDP套接字,那么第三個參數(shù)該怎么選擇我就不說了,呵呵,你懂的。
關(guān)鍵函數(shù)2:socket_connect($socket參數(shù)1,$ip參數(shù)2,$port參數(shù)3)
作用:連接一個套接字,返回值為true或者false
參數(shù)1:socket_create的函數(shù)返回值
參數(shù)2:ip地址
參數(shù)3:端口號
關(guān)鍵函數(shù)3:socket_bind($socket參數(shù)1,$ip參數(shù)2,$port參數(shù)3)
作用:綁定一個套接字,返回值為true或者false
參數(shù)1:socket_create的函數(shù)返回值
參數(shù)2:ip地址
參數(shù)3:端口號
關(guān)鍵函數(shù)4:socket_listen($socket參數(shù)1,$backlog 參數(shù)2)
作用:監(jiān)聽一個套接字,返回值為true或者false
參數(shù)1:socket_create的函數(shù)返回值
參數(shù)2:最大監(jiān)聽套接字個數(shù)
關(guān)鍵函數(shù)5:socket_accept($socket)
作用:接收套接字的資源信息,成功返回套接字的信息資源,失敗為false
參數(shù):socket_create的函數(shù)返回值
關(guān)鍵函數(shù)6:socket_read($socket參數(shù)1,$length參數(shù)2)
作用:讀取套接字的資源信息,
返回值:成功把套接字的資源轉(zhuǎn)化為字符串信息,失敗為false
參數(shù)1:socket_create或者socket_accept的函數(shù)返回值
參數(shù)2:讀取的字符串的長度
關(guān)鍵函數(shù)7:socket_write($socket參數(shù)1,$msg參數(shù)2,$strlen參數(shù)3)
作用:把數(shù)據(jù)寫入套接字中
返回值:成功返回字符串的字節(jié)長度,失敗為false
參數(shù)1:socket_create或者socket_accept的函數(shù)返回值
參數(shù)2:字符串
參數(shù)3:字符串的長度
關(guān)鍵函數(shù)8:socket_close($socket)
作用:關(guān)閉套接字
返回值:成功返回true,失敗為false
參數(shù):socket_create或者socket_accept的函數(shù)返回值
這八個函數(shù)是socket的核心函數(shù),下面列舉兩個個比較重要的函數(shù)
socket_last_error($socket),參數(shù)為socket_create的返回值,作用是獲取套接字的最后一條錯誤碼號,返回值套接字code
socket_strerror($code),參數(shù)為socket_last_error函數(shù)的返回值,獲取code的字符串信息,返回值也就是套接字的錯誤信息
這兩個函數(shù)在socket編程中還是很重要的,在寫socket編程的時(shí)候,我覺得你還是得利用起來,特別是新手,可以當(dāng)做調(diào)試用
之前公司做過兩個項(xiàng)目,是用的是websoket框架,workman,大家有需要的可以看看這個框架,還不錯,基本的都能滿足需求.
之前發(fā)布的websoket文章分享給大家
關(guān)聯(lián)文章 1
掃描二維碼推送至手機(jī)訪問。
版權(quán)聲明:本文由飛速云SEO網(wǎng)絡(luò)優(yōu)化推廣發(fā)布,如需轉(zhuǎn)載請注明出處。