[golang 微服务] 7. go-micro框架介绍,go-micro脚手架,go-micro结合consul搭建微服务案例

news/2023/12/4 8:06:32

一.go-micro框架

  1. 前言

上一节讲解了 GRPC微服务集群+ Consul集群+ grpc-consul-resolver相关的案例,知道了微服务之间通信采用的 通信协议,如何实现 服务的注册和发现,搭建 服务管理集群,以及服务与服务之间的 RPC通信方式,具体的内容包括: protobuf协议consuldocker部署consul集群GRPC框架的使用等具体的实现方案.以上这些具体的方案都是为了解决: 微服务实践过程中具体的某个问题而提出的,实现微服务架构的项目开发,但是,在具体的项目开发过程中,开发者聚焦的是 业务逻辑的开发功能的实现,大量的 环境配置调试搭建等基础性工作会耗费相当一部分的精力,因此有必要将微服务架构中所涉及到的,相关的解决方案做 集中管理和维护,这就需要使用到 Micro来进行处理
  1. go-micro介绍

Go Micro是一个简化分布式开发 的微服务生态系统,该系统为开发分布式应用程序提供了 高效便捷的模块构建主要目的简化分布式系统的开发,它默认实现了 consul作为服务发现(2019年源码修改了默认使用 mdns),通过 http进行通信,通过 protobuf和 json进行编解码,可以方便开发者们非常简单的开发出微服务架构的项目,并且随着业务模块的增加和功能的增加,Go Micro还能够提供管理微服务环境的工具和功能
github地址: https://github.com/asim/go-micro
  1. go-micro的主要功能

  • 身份验证

身份验证作为一等公民内置,身份验证和授权通过为每个服务提供身份和证书来实现安全的零信任网络,这还包括基于规则的访问控制
  • 动态配置

任何地方加载热重载动态配置,config 接口提供了一种从任何来源(如环境变量、文件、etcd) 加载应用程序级别配置的方法,可以合并源,甚至定义回退
  • 数据存储

一个简单的 数据存储接口,用于 读取、写入删除记录,它默认包括对 内存文件CockroachDB 的支持, 状态和持久性成为原型设计之外的核心要求,Micro 希望将其构建到框架中
  • 服务发现

自动服务注册名称解析,服务发现是 微服务开发的核心,当服务 A 需要与服务 B 通话时,它需要该服务的位置,默认发现机制是 多播 DNS (mdns),一个 zeroconf 系统
  • 负载均衡

基于服务发现的 客户端负载均衡,一旦有了任意数量的 服务实例地址,现在需要一种方法来决定 路由到哪个节点,使用 随机散列负载均衡来提供 跨服务的均匀分布,并在出现问题时 重试不同的节点
  • 消息编码

基于 内容类型动态消息编码,客户端和服务器将使用 编解码器内容类型无缝编码和解码 Go 类型,任何种类的消息都可以被编码并从不同的客户端发送,默认情况下,客户端和服务器会处理此问题,这默认包括 protobuf json
  • RPC 客户端/服务器

基于 RPC 的请求/响应,支持 双向流,为同步通信提供了一个抽象,对服务的请求将被 自动解析、负载均衡、拨号和流式传输
  • Async Messaging

PubSub 作为 异步通信事件驱动架构的一等公民内置, 事件通知微服务开发的核心模式,默认消息系统是 HTTP 事件消息代理
  • 事件流

PubSub 非常适合 异步通知,但对于更高级的用例, 事件流是首选,提供 持久存储,从偏移量和确认中消耗,Go Micro 包括对 NATS Jetstream Redis 流的支持
  • 同步

分布式系统通常以 最终一致的方式构建,对 分布式锁定领导(Leader)的支持作为同步接口内置,当使用 最终一致的数据库调度时,请使用 Sync 接口
  • Pluggable Interfaces

Go Micro 为每个分布式系统抽象使用 Go 接口,因此,这些接口是 可插拔的,并 允许 Go Micro 与运行时无关,可以插入任何底层技术
  1. go-micro安装

github地址: https://github.com/asim/go-micro, 如下,点击CLI后,可以查看安装相关命令 :
通过go install github.com/go-micro/cli/cmd/go-micro@latest安装,成功后,通过 go-micro new service helloworld命令就可以搭建微服务的服务端,客户端,搭建后, 系统会自动生成 .proto, .pb.go等远程调用的文件以及方法
安装如下:运行命令 go install github.com/go-micro/cli/cmd/go-micro@latest

命令完成后,在GOPATH的bin目录就可以查看到对应的go-micro.exe执行文件了

然后查看是否安装成功,输入命令 :go-micro
安装成功

二.go-micro的使用

(一).helloworld简单案例讲解

  1. 创建服务端

在servers目录下运行 :go-micro new service helloworld
  1. 下载项目所需依赖

初次使用时,需执行Makefile里面的命令

Makefile内容如下:
GOPATH:=$(shell go env GOPATH).PHONY: init
init:@go get -u google.golang.org/protobuf/proto@go install google.golang.org/protobuf/cmd/protoc-gen-go@latest@go install github.com/go-micro/generator/cmd/protoc-gen-micro@latest.PHONY: proto
proto:@protoc --proto_path=. --micro_out=. --go_out=:. proto/helloworld.proto.PHONY: update
update:@go get -u.PHONY: tidy
tidy:@go mod tidy.PHONY: build
build:@go build -o helloworld *.go.PHONY: test
test:@go test -v ./... -cover.PHONY: docker
docker:@docker build -t helloworld:latest .

windows下依次执行Markfile init里面的命令:

#init里面的命令:引入需要的包
go get -u google.golang.org/protobuf/proto
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install github.com/go-micro/generator/cmd/protoc-gen-micro@latest
#proto:执行生成对应的protobuf相关文件
protoc --proto_path=. --micro_out=. --go_out=:. proto/helloworld.proto

linux下通过make命令下载对应依赖或者编译项目

make proto update tidy

完成上面命令后的目录如下:

  1. 初始化服务端项目

go mod init helloworld
go mod tidy

如果出现:

F:\www\go-data\src\go_code\micro\grpc_demo\server\helloworld>go mod tidy
go: finding module for package google.golang.org/protobuf/runtime/protoimpl
go: finding module for package go-micro.dev/v4/logger
go: finding module for package go-micro.dev/v4
go: finding module for package go-micro.dev/v4/server
go: finding module for package go-micro.dev/v4/api
go: finding module for package google.golang.org/protobuf/proto
go: finding module for package google.golang.org/protobuf/reflect/protoreflect
go: finding module for package go-micro.dev/v4/client
go: found go-micro.dev/v4 in go-micro.dev/v4 v4.10.2
go: found go-micro.dev/v4/logger in go-micro.dev/v4/logger v1.18.0
go: found go-micro.dev/v4/api in go-micro.dev/v4/api v1.18.0
go: found go-micro.dev/v4/client in go-micro.dev/v4/client v1.18.0
go: found go-micro.dev/v4/server in go-micro.dev/v4/server v1.18.0
go: found google.golang.org/protobuf/proto in google.golang.org/protobuf v1.30.0
go: found google.golang.org/protobuf/reflect/protoreflect in google.golang.org/protobuf v1.30.0
go: found google.golang.org/protobuf/runtime/protoimpl in google.golang.org/protobuf v1.30.0
go: helloworld/proto importsgo-micro.dev/v4/api: go-micro.dev/v4/api@v1.18.0: parsing go.mod:module declares its path as: github.com/micro/go-microbut was required as: go-micro.dev/v4/api

说明下载"go-micro.dev/v4"这个包失败了,这时则需运行命令 go get go-micro.dev/v4,如图:

然后再次执行步骤3中的命令即可

  1. 配置服务端consul

(1).启动consul

在配置consul之前,需要启动consul,命令行执行命令 :consul agent -dev,启动consul服务, 也可以使用 consul集群相关操作进行处理

(2).引入consul包

然后在servers/helloworld/main.go下引入consul包:
可以在import引入包后,执行 go mod tidy ,也可以执行 go get github.com/go-micro/plugins/v4/registry/consul 命令引入
 github.com/go-micro/plugins/v4/registry/consul

(3).实例化consul:

consulReg := consul.NewRegistry()

(4).注册consul

srv := micro.NewService(micro.Address("192.168.1.132:8080"),  // 选择注册服务器地址,默认为本机,也可以选择consul集群中的clientmicro.Name(service),micro.Version(version),micro.Registry(consulReg),
)

(5).详细代码

package mainimport ("helloworld/handler"pb "helloworld/proto""go-micro.dev/v4""go-micro.dev/v4/logger""github.com/go-micro/plugins/v4/registry/consul"
)var (service = "helloworld"version = "latest"
)func main() {//集成consulconsulReg := consul.NewRegistry()// Create servicesrv := micro.NewService(micro.Address("127.0.0.1:8080"),  //指定微服务的ip:  选择注册服务器地址,也可以不配置,默认为本机,也可以选择consul集群中的clientmicro.Name(service),micro.Version(version),//注册consulmicro.Registry(consulReg),)srv.Init(micro.Name(service),micro.Version(version),)// Register handlerif err := pb.RegisterHelloworldHandler(srv.Server(), new(handler.Helloworld)); err != nil {logger.Fatal(err)}// Run serviceif err := srv.Run(); err != nil {logger.Fatal(err)}
}

(6).结果显示

微服务服务端就配置并启动了
  1. 生成客户端

(1).生成客户端目录

在client目录下运行 :go-micro new client helloworld
目录如下: 结构和服务端结构一致,参考服务端结构
注意:在这里生成的客户端文件夹名字是helloworld-client
里面也存在 Makefile文件,操作和上面服务端一致, 下面就要让 客户端连接上微服务服务端

(2).创建客户端proto文件相关

这里可以直接把服务端中的proto文件夹复制到helloworld-client文件夹下,然后可以初始化项目,删除go.mod, 执行初始化命令 :go mod init helloworld-client, go mod tidy
重新初始化helloworld-client: 删除go.mod文件,然后执行: go mod init helloworld-client, go mod tidy

(3).完善helloworld-client/main.go文件

1).修改helloworld/proto包名字
需要把helloworld/proto修改为helloworld-client/proto

然后也要引入consul包

2).引入consul包
然后在client/helloworld-client/main.go下引入consul包:
可以在import引入包后,执行 go mod tidy ,也可以执行 go get github.com/go-micro/plugins/v4/registry/consul 命令引入
 github.com/go-micro/plugins/v4/registry/consul
3).实例化consul:
consulReg := consul.NewRegistry()
4).注册consul
//集成consul
consulReg := consul.NewRegistry(//指定微服务的ip:  选择注册服务器地址,默认为本机,也可以选择consul集群中的clientregistry.Addrs("127.0.0.1:8500"),
)
// Create service
srv := micro.NewService(//注册consulmicro.Registry(consulReg),
)
5).详细代码
package mainimport ("context""time"pb "helloworld-client/proto""go-micro.dev/v4""go-micro.dev/v4/logger"   "go-micro.dev/v4/registry""github.com/go-micro/plugins/v4/registry/consul"
)var (service = "helloworld" //需要和微服务服务端对应的service名统一,这样才能调用该微服务version = "latest"
)func main() {//集成consulconsulReg := consul.NewRegistry(//指定微服务的ip:  选择注册服务器地址,默认为本机,也可以选择consul集群中的clientregistry.Addrs("127.0.0.1:8500"),)// Create servicesrv := micro.NewService(//注册consulmicro.Registry(consulReg),)srv.Init()// 创建客户端实例c := pb.NewHelloworldService(service, srv.Client())for {// Call service: CallRequest就是.proto中的rsp, err := c.Call(context.Background(), &pb.CallRequest{Name: "张三"})if err != nil {logger.Fatal(err)}logger.Info(rsp)//每隔一段时间请求time.Sleep(2 * time.Second)  // 每隔2秒请求}
}
6).结果显示
客户端配置操作完成

(二).goodsinfo微服务案例讲解

  1. 创建服务端

在servers目录下运行 :go-micro new service goodsinfo

目录和上面helloworld案例类似,只不过是名字变成了goodsinfo而已

然后修改goodsinfo.proto,增加需要的服务方法:这里的写法和[golang 微服务] 4. gRPC介绍,Protobuf结合gRPC 创建微服务 里面的类似:

syntax = "proto3";package goodsinfo;option go_package = "./proto;goodsinfo";//商品相关方法
service Goodsinfo {//AddGoods: 定义增加商品的微服务, 这里的写法和gRPC中的写法一致rpc AddGoods(AddRequest) returns (AddResponse) {}
}//和gRPC中的写法一致
message AddRequest {string title = 1;string price = 2;string content = 3;
}//和gRPC中的写法一致
message AddResponse {string message = 1;bool success = 2;
}
  1. 下载项目所需依赖

初次使用时,需执行Makefile里面的命令

Makefile内容如下:
GOPATH:=$(shell go env GOPATH).PHONY: init
init:@go get -u google.golang.org/protobuf/proto@go install google.golang.org/protobuf/cmd/protoc-gen-go@latest@go install github.com/go-micro/generator/cmd/protoc-gen-micro@latest.PHONY: proto
proto:@protoc --proto_path=. --micro_out=. --go_out=:. proto/helloworld.proto.PHONY: update
update:@go get -u.PHONY: tidy
tidy:@go mod tidy.PHONY: build
build:@go build -o helloworld *.go.PHONY: test
test:@go test -v ./... -cover.PHONY: docker
docker:@docker build -t helloworld:latest .

windows下依次执行init里面的命令:

#init:引入相关包
go get -u google.golang.org/protobuf/proto
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install github.com/go-micro/generator/cmd/protoc-gen-micro@latest
#proto: 生成protobuf相关文件
protoc --proto_path=. --micro_out=. --go_out=:. proto/helloworld.proto

linux下通过make命令下载对应依赖或者编译项目

make proto update tidy

完成上面命令后的目录如下:

生成了goodsinfo相关handler,以及.pb.go文件
  1. 初始化服务端项目

go mod init goodsinfo
go mod tidy

如果出现:

F:\www\go-data\src\go_code\micro\grpc_demo\server\helloworld>go mod tidy
go: finding module for package google.golang.org/protobuf/runtime/protoimpl
go: finding module for package go-micro.dev/v4/logger
go: finding module for package go-micro.dev/v4
go: finding module for package go-micro.dev/v4/server
go: finding module for package go-micro.dev/v4/api
go: finding module for package google.golang.org/protobuf/proto
go: finding module for package google.golang.org/protobuf/reflect/protoreflect
go: finding module for package go-micro.dev/v4/client
go: found go-micro.dev/v4 in go-micro.dev/v4 v4.10.2
go: found go-micro.dev/v4/logger in go-micro.dev/v4/logger v1.18.0
go: found go-micro.dev/v4/api in go-micro.dev/v4/api v1.18.0
go: found go-micro.dev/v4/client in go-micro.dev/v4/client v1.18.0
go: found go-micro.dev/v4/server in go-micro.dev/v4/server v1.18.0
go: found google.golang.org/protobuf/proto in google.golang.org/protobuf v1.30.0
go: found google.golang.org/protobuf/reflect/protoreflect in google.golang.org/protobuf v1.30.0
go: found google.golang.org/protobuf/runtime/protoimpl in google.golang.org/protobuf v1.30.0
go: helloworld/proto importsgo-micro.dev/v4/api: go-micro.dev/v4/api@v1.18.0: parsing go.mod:module declares its path as: github.com/micro/go-microbut was required as: go-micro.dev/v4/api

说明下载"go-micro.dev/v4"这个包失败了,这时则需运行命令 go get go-micro.dev/v4,如图:

然后再次执行步骤3中的命令即可

修改远程调用的方法handler/goodsinfo.go

原始的代码:
package handlerimport ("context""io""time""go-micro.dev/v4/logger"pb "goodsinfo/proto"
)type Goodsinfo struct{}func (e *Goodsinfo) Call(ctx context.Context, req *pb.CallRequest, rsp *pb.CallResponse) error {logger.Infof("Received Goodsinfo.Call request: %v", req)rsp.Msg = "Hello " + req.Namereturn nil
}func (e *Goodsinfo) ClientStream(ctx context.Context, stream pb.Goodsinfo_ClientStreamStream) error {var count int64for {req, err := stream.Recv()if err == io.EOF {logger.Infof("Got %v pings total", count)return stream.SendMsg(&pb.ClientStreamResponse{Count: count})}if err != nil {return err}logger.Infof("Got ping %v", req.Stroke)count++}
}func (e *Goodsinfo) ServerStream(ctx context.Context, req *pb.ServerStreamRequest, stream pb.Goodsinfo_ServerStreamStream) error {logger.Infof("Received Goodsinfo.ServerStream request: %v", req)for i := 0; i < int(req.Count); i++ {logger.Infof("Sending %d", i)if err := stream.Send(&pb.ServerStreamResponse{Count: int64(i),}); err != nil {return err}time.Sleep(time.Millisecond * 250)}return nil
}func (e *Goodsinfo) BidiStream(ctx context.Context, stream pb.Goodsinfo_BidiStreamStream) error {for {req, err := stream.Recv()if err == io.EOF {return nil}if err != nil {return err}logger.Infof("Got ping %v", req.Stroke)if err := stream.Send(&pb.BidiStreamResponse{Stroke: req.Stroke}); err != nil {return err}}
}
修改成我们想要的代码:
package handlerimport ("context""go-micro.dev/v4/logger"pb "goodsinfo/proto"
)type Goodsinfo struct{}func (e *Goodsinfo) AddGoods(ctx context.Context, req *pb.AddRequest, rsp *pb.AddResponse) error {logger.Infof("request: %v", req)//书写返回的逻辑结果rsp.Message = "增加成功"rsp.Success = truereturn nil
}
  1. 配置服务端consul

(1).启动consul

在配置consul之前,需要启动consul,命令行执行命令 :consul agent -dev,启动consul服务, 也可以使用 consul集群相关操作进行处理

(2).引入consul包

然后在servers/goodsinfo/main.go下引入consul包:
可以在import引入包后,执行 go mod tidy ,也可以执行 go get github.com/go-micro/plugins/v4/registry/consul 命令引入
 github.com/go-micro/plugins/v4/registry/consul

(3).实例化consul:

consulReg := consul.NewRegistry()

(4).注册consul

srv := micro.NewService(micro.Address("192.168.1.132:8080"),  // 选择注册服务器地址,默认为本机,也可以选择consul集群中的clientmicro.Name(service),micro.Version(version),micro.Registry(consulReg),
)

(5).详细代码

package mainimport ("goodsinfo/handler"pb "goodsinfo/proto""go-micro.dev/v4""go-micro.dev/v4/logger""github.com/go-micro/plugins/v4/registry/consul"
)var (service = "goodsinfo"version = "latest"
)func main() {//集成consulconsulReg := consul.NewRegistry()// Create servicesrv := micro.NewService(micro.Address("127.0.0.1:8080"),  //指定微服务的ip:  选择注册服务器地址,也可以不配置,默认为本机,也可以选择consul集群中的clientmicro.Name(service),micro.Version(version),//注册consulmicro.Registry(consulReg),)srv.Init(micro.Name(service),micro.Version(version),)// Register handlerif err := pb.RegisterGoodsinfoHandler(srv.Server(), new(handler.Goodsinfo)); err != nil {logger.Fatal(err)}// Run serviceif err := srv.Run(); err != nil {logger.Fatal(err)}
}

(6).结果显示

展示和上面helloworld类似,微服务服务端就配置并启动了
  1. 生成客户端

(1).生成客户端目录

在client目录下运行 :go-micro new client goodsinfo
目录如下: 结构和服务端结构一致,参考服务端结构
里面也存在 Makefile文件,操作和上面服务端一致, 下面就要让 客户端连接上微服务服务端

(2).创建客户端proto文件相关

这里可以直接把服务端中的proto文件夹复制到goodsinfo-client文件夹下,然后可以初始化项目,删除go.mod, 执行初始化命令 :go mod init goodsinfo-client, go mod tidy

如果出现:

go: goodsinfo-client/proto importsgo-micro.dev/v4/api: go-micro.dev/v4/api@v1.18.0: parsing go.mod:module declares its path as: github.com/micro/go-microbut was required as: go-micro.dev/v4/api

go get go-micro.dev/v4,和上面服务器解决方案一致

当然,也可以再次执行Makefile中的命令,和上面服务器一致

(3).完善goodsinfo-client/main.go文件

1).修改goodsinfo/proto包名字
需要把goodsinfo/proto修改为goodsinfo-client/proto

然后也要引入consul包

2).引入consul包
然后在client/goodsinfo-client/main.go下引入consul包:
可以在import引入包后,执行 go mod tidy ,也可以执行 go get github.com/go-micro/plugins/v4/registry/consul 命令引入
 github.com/go-micro/plugins/v4/registry/consul
3).实例化consul:
consulReg := consul.NewRegistry()
4).注册consul
//集成consul
consulReg := consul.NewRegistry(//指定微服务的ip:  选择注册服务器地址,默认为本机,也可以选择consul集群中的clientregistry.Addrs("127.0.0.1:8500"),)
// Create service
srv := micro.NewService(//注册consulmicro.Registry(consulReg),
)
5).详细代码
package mainimport ("context""go-micro.dev/v4/registry""time"pb "goodsinfo-client/proto""go-micro.dev/v4""go-micro.dev/v4/logger""github.com/go-micro/plugins/v4/registry/consul"
)var (service = "goodsinfo"version = "latest"
)func main() {//集成consulconsulReg := consul.NewRegistry(//指定微服务的ip:  选择注册服务器地址,默认为本机,也可以选择consul集群中的clientregistry.Addrs("127.0.0.1:8500"),)// Create servicesrv := micro.NewService(//注册consulmicro.Registry(consulReg),)srv.Init()// 创建客户端服务c := pb.NewGoodsinfoService(service, srv.Client())// Call servicersp, err := c.AddGoods(context.Background(), &pb.AddRequest{Title: "我是一个商品",Price: "20.22",Content: "内容展示",})if err != nil {logger.Fatal(err)}logger.Info(rsp)
}
6).结果显示
客户端配置操作完成

[上一节][golang 微服务] 6. GRPC微服务集群+Consul集群+grpc-consul-resolver案例演示


http://www.ppmy.cn/news/480229.html

相关文章

关于在校大学生的Edu教育邮箱能够薅到的羊毛

以下软件都是本人使用过的&#xff0c;未使用的没用列出&#xff0c;因为本人是计算机专业&#xff0c;所以一下软件大多为计算机相关&#xff0c;后期可能会补充其他领域内容 1、作为程序猿&#xff0c;最最爱的当然是jetbrain全家桶了&#xff0c;在jetbrain的教育许可区可申…

苹果官网罕见打折,iPhone13全系优惠600元;国际象棋机器人弄伤对弈儿童手指;国内Go语言爱好者发起新编程语言|极客头条

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&…

苹果官网罕见打折,iPhone13全系优惠600元;国际象棋机器人弄伤对弈儿童手指;国内Go语言爱好者发起新编程语言|极客头条...

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&#…

2020年7月9日,苹果“返校“促销活动正式开始

2020 年苹果“返校“促销活动已经开始啦&#xff0c;活动时间 7月9日 - 9月29日&#xff0c;等等党迎来胜利&#xff01; 1.什么是苹果“返校”促销活动&#xff1f; 苹果“返校”促销&#xff0c;是苹果一年一度的活动&#xff0c;通常在每年的暑假期间开始&#xff0c;持续到…

软件技巧:7款冷门且十分良心的软件

1、Okular 阅读器 Okular是一款来自KDE的通用文档阅读器&#xff0c;支持众多文档格式&#xff0c;如PDF、Postscript、DjVu、CHM、XPS、ePub、图片格式、漫画格式等&#xff0c;支持Windows、macOS与Linux&#xff0c;是科研学术人士阅读文献的好工具&#xff0c;也是电子书爱…

硬件学习-无线网卡、无线上网卡

无线网卡&#xff1a; 最简单的例子就是&#xff1a;你的手机&#xff0c;既可以连接无线网&#xff0c;又可以将手机的网作为热点分享出去&#xff0c;这就是你的手机有无线网卡。 假如你有一个笔记本&#xff0c;那么笔记本本身自带了无线网卡。有了无线网卡&#xff0c;当…

计算机网卡接口类型,无线上网卡接口有哪些类型 无线上网卡接口类型介绍【详解】...

无线上网卡的接口类型 目前&#xff0c; 无线上网卡主要应用在笔记本上和PDA(掌上电脑)上&#xff0c;还有部分应用在台式机上&#xff0c;所以&#xff0c;其接口也有多种规格。 常见的接口主要有PCMCIA接口、USB接口、CF接口等几类。 PCMCIA接口 这种类型接口的无线上网卡一般…

联通无线网卡人工服务器,联通无线上网卡怎么用 联通无线上网卡使用步骤【详解】...

【联通上网卡】联通无线上网卡怎么用 如何使用联通无线上网卡 联通无线上网卡业务功能 1、提供高速无线上网服务&#xff1b;无线上网卡仅在开通3G网络的区域使用&#xff0c;不能切换到2G网络使用&#xff1b; 2、上网卡使用专属号码&#xff0c;上网卡和专属号码关闭语音功能…

电信无线网卡无服务器,优化电信3G无线上网卡网速的办法

现在很多家庭都使用电信3g无线上网卡&#xff0c;但是网速不乐观&#xff0c;学习啦小编为大家整理了如何优化电信3g无线上网卡的网速&#xff0c;供大家参考阅读! 优化电信3g无线上网卡网速的方法 优化电信3g无线上网卡网速的方法一.电脑设置 (1)运行“regedit”&#xff0c;以…

中兴AC2746 usb接口的3G上网卡

嵌入式linux是2.6.24版的。主机是AT9261&#xff08;arm926ej-s内核&#xff09;的开发板。 买是市面上常见的中兴AC2746 usb接口的3G上网卡。在windows下使用极方便&#xff0c;可是在linux下使用就麻烦了。 首先&#xff0c;要确认你的嵌入式linux系统是可以支持热插拔的系统…

计算机网络cdma的优点,cdma上网卡怎么样 cdma上网卡功能优点及报价

二十一世纪是信息时代&#xff0c;通信技术也得到了空前的快速发展&#xff0c;以至于现在的人最离不开的就是网络了。我们通过网络足不出户就可知晓天下事&#xff0c;还可以和世界各地的人交朋友&#xff0c;上网购物等&#xff0c;网络改变了我们很多的生活方式&#xff0c;…

五款经典GPRS无线上网卡比拼

【IT168 专稿】 说到无线上网&#xff0c;人们很自然就会想起WLAN这种无线局域网&#xff0c;其实就实用性来说&#xff0c;它还不如另两种基于移动通讯的无线上网方式&#xff1a;GPRS和CDMA&#xff0c;因为WLAN只是在局域网范畴内实现无线网络连接&#xff0c;而GPRS和CDMA…

关于无线上网卡的使用记录

关于无线上网卡的使用记录 配置 联通物联网卡&#xff0c;无月租华为卡托E8372h-820年套餐 600G*12[每月120G高速&#xff0c;480G中速]管理中心&#xff1a;192.168.8.1公众号&#xff1a;讯飞时通 问题 卡托发热&#xff1f; 可24小时持续供网&#xff0c;主板高度集成&…

全球与中国无线上网卡和行业市场需求及投资前景分析报告2022-2028年

全球与中国无线上网卡和行业市场需求及投资前景分析报告2022-2028年 /*-/*-/*-/*-/*-/*-/*-/*-/*-/*-/*-/*-/*- 详情内容请咨询鸿晟信合研究网&#xff01; 【全新修订】&#xff1a;2022年9月 【撰写单位】&#xff1a;鸿晟信合研究网 第一章 行业概述及全球与中国市场发展现…

服务器怎么使用无线网卡,无线上网卡怎么用

宽带用户ADSL&#xff0c;都非常关心自己的上网速度为多少&#xff0c;到底是快还是慢。并且&#xff0c;也有各种软件或测试网站提供检查上网速度的服务。然而&#xff0c;上网速度的查询&#xff0c;是一个复杂的问题&#xff0c;并不是三言两语就能说清楚问题的。我们可以从…

MySQL三范式

1、查询语句写的烂2、索引失效(数据变更)3、关联查询太多join(设计缺陷或不得已的需求)4、服务器调优及各个参数设置(缓冲、线程数等)通常SQL调优过程: 观察,至少跑1天,看看生产的慢SQL情况。开启慢查询日志,设置阙值,比如超过5秒钟的就是慢SQL,并将它抓取出来。ex…

如何在纺织服装行业运用IPD?

纺织服装行业是我国的传统支柱产业&#xff0c;对促进国民经济发展、解决就业、增加国民收入、促进社会和谐发展等方面具有十分重要的意义。纺织服装行业属于劳动密集型产业&#xff0c;产业链上下游关联度较大。产业链上游原材料主要包括棉花、麻、蚕茧丝等天然纤维以及人造纤…

CSS面经

1、CSS的BFC 一、何为BFC BFC&#xff08;Block Formatting Context&#xff09;格式化上下文&#xff0c;是Web页面中盒模型布局的CSS渲染模式&#xff0c;指一个独立的渲染区域或者说是一个隔离的独立容器。 二、形成BFC的条件 1、浮动元素&#xff0c;float 除 none 以外的值…

前端第一天 基础

1.开发工具 我们主要用的开发工具有 编辑器、浏览器、photoshop。 、编辑器 常用的前端编辑器有&#xff1a;dreamweaver、sublime、webstorm、Hbuilder、vscode 普通青年 Dreamweaver 文艺青年 sublime 高手和大傻子 用记事本 其实&#xff0c;屌丝青年也可以用sublime …

iOS 7 新特性

iOS7更新了很多引人注目的功能。用户界面完全重新设计了。iOS7为开发2D&#xff0c;2.5D游戏引入了全新的动画系统。加强多线程&#xff0c;点对点连接&#xff0c;以及许多其他重要的功能让iOS7成为有史以来最有意义的一次发布。 这边文章总结了iOS7开发相关的特性。这个版本大…
最新文章