go建立微服务连接 php调用微服务

微服务的作用是多个项目连接方便快捷,不需要用http访问请求直接用tcp请求
优点:访问不会存在超时http访问时间过长会存在超时500
tcp连接特别快
http相当于应用层tcp是网络层,少了很多加密处理逻辑所以很快

func main() {
	// 注册服务
		err := rpc.RegisterName("名称", new(包.类))//可以直接注册类下面的所有方法
		if err != nil {
			fmt.Println(err.Error())
			return
		}
		// 监听端口
		listen, errs := net.Listen("tcp", “0.0.0.0:8089“)
		if errs != nil {
			fmt.Println(errs.Error())
			return
		}
		defer listen.Close()
	
		for {
			conn, err1 := listen.Accept()
			if err1 != nil {
				fmt.Println(err1.Error())
				continue
			}
			// 绑定服务
			go rpc.ServeCodec(jsonrpc.NewServerCodec(conn))
		}
	}

php原生

 /**
     * 微服务调用客户端
     * @param string $method 微服务方法
     * @param string $data 发送的数据
     * @param string $err 错误信息
     * @param string $id 请求的唯一id【不需要可以取默认值就行】
     * @return boolean
     */
    public static function rPCClient(string $method, string $data, &$err = '', $id = 0)
    {
        $send_data = json_encode([
            'method' => $method,
            'params' => [$data],
            'id'     => $id
        ], JSON_UNESCAPED_UNICODE);
      
        
        $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
        if ($socket === false) {
            $err = socket_strerror(socket_last_error());
            return false;
        } 
        $result = socket_connect($socket,"127.0.0.1", “8089”);
        if ($result === false) {
            $err = socket_strerror(socket_last_error($socket));
            return false;
        }
        socket_write($socket, $send_data, strlen($send_data));
        $response = socket_read($socket, 1024);
        socket_close($socket);
        return $response;
    }

php+swoole调用微服务

/**
     * 微服务调用客户端
     * @param string $method 微服务方法
     * @param string $data 发送的数据
     * @param string $id 请求的唯一id【不需要可以取默认值就行】
     * @return boolean
     */
    public static function rPCClient(string $method, string $data, $id = 0)
    {
        $sdata = [
            'method' => $method,
            'params' => [$data],
            'id'     => $id
        ];
        $send_data = json_encode($sdata, JSON_UNESCAPED_UNICODE);
        $res = self::sendData2Socket("127.0.0.1", 8089, $send_data);
        return $res;
    }
    /**
     * 发送数据到socket接口
     * @param type $address
     * @param type $port
     * @param array|string $send_data
     * @return boolean
     */
    public static function sendData2Socket($address, $port, $send_data)
    {
        $client = new Client(SWOOLE_SOCK_TCP);
        $connect = $client->connect($address, $port, -1);
        
        if (!$connect) {
            $client->close();
            return false;
        }
        if (is_array($send_data)) {
            $send_data = json_encode($send_data, JSON_UNESCAPED_UNICODE);
        }
        $client->send($send_data . "\n");
        $data = $client->recv();
        $client->close();
        if (!$data) {
            return false;
        }
        return $data;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值