共计 819 个字符,预计需要花费 3 分钟才能阅读完成。
前言
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 对比)。
links
- 目录