前言
socket提供了在傳輸層進行網絡編程的方法,它比基於http協議的接口傳輸更高效,RPC(Remote Procedure Call)是遠程過程調用,常用於分佈式系統等,而rpc很多是基於socket實現的。不瞭解socket、http等協議請閱讀
https://blog.csdn.net/guyan03...。
Socket 都可以用“打開open –> 讀寫write/read –> 關閉close”模式來操作。它不侷限於某一語言,這裏我們主要講Go、php語言基於socket實現通訊。
序列化採用json,數據格式比較簡單,支持多種語言。
Go socket 採用c/s架構
客戶端:net.Dial() Write() Read() Close()
服務器:net.Listen() Accept() Read() Write() Close()
源代碼地址:https://github.com/guyan0319/...
測試
1、下載源代碼至GOPATH目錄golangSocketPhp
2、運行服務端,在example目錄下server.go
go run server.php
輸出:
Waiting for clients
3、新窗口下運行客戶端,在example目錄下client.go
go run client.go
輸出:
receive data string[6]:golang
golang這個是從服務端返回的數據。
4、運行php語言客戶端,在php目錄下的socket_client.php
php -f socket_client.php
或瀏覽器訪問 http://localhost/xxx/socket_c... 配置自己的網址
輸出結果:
client write success
server return message is:
php
小結:
選json序列化,主要考慮它實現起來簡單,很多語言支持。缺點是序列化效率低,序列化後數據相對比較大(這裏跟protobuf對比)。