rpc demo

作者: 吃猫的鱼0 | 来源:发表于2018-09-30 14:35 被阅读0次

client

import (
    "fmt"
    "net/rpc"
)

func main() {
    fmt.Println("client====")
    client, err := rpc.DialHTTP("tcp", "127.0.0.1:1234")
    if err != nil {
        fmt.Println("链接rpc服务器失败:", err)
    }
    var reply int
    err = client.Call("Watcher.GetInfo", 1, &reply)
    if err != nil {
        fmt.Println("调用远程服务失败", err)
    }
    fmt.Println("远程服务返回结果:", reply)
}

server


import (
    "fmt"
    "io"
    "net"
    "net/http"
    "net/rpc"
    "sync"
)

type Watcher int

func (w *Watcher) GetInfo(arg int, result *int) error {
    *result = 1
    return nil
}

func main() {
    fmt.Println("server====")
    http.HandleFunc("/ghj1976", Ghj1976Test)

    watcher := new(Watcher)
    rpc.Register(watcher)
    rpc.HandleHTTP()

    l, err := net.Listen("tcp", ":1234")
    if err != nil {
        fmt.Println("监听失败,端口可能已经被占用")
    }
    fmt.Println("正在监听1234端口")
    http.Serve(l, nil)
}

func Ghj1976Test(w http.ResponseWriter, r *http.Request) {
    io.WriteString(w, "<html><body>ghj1976-123</body></html>")
}

type chanMap struct {
    v map[string]chan []byte
    sync.RWMutex
}

// 更新
func (this *chanMap) Set(key string, value chan []byte) {
    this.Lock()
    defer this.Unlock()
    v, ok := this.v[key]
    if !ok {
        this.v[key] = value
    }
    v <- []byte("bad request")
    this.v[key] = value
}

// 查找
func (this *chanMap) Get(key string) (value chan []byte, ok bool) {
    this.RLock()
    defer this.RUnlock()
    value, ok = this.v[key]
    return
}

// 删除
func (this *chanMap) Del(key string) {
    this.Lock()
    defer this.Unlock()
    delete(this.v, key)
}

func wxTest(w http.ResponseWriter, r *http.Request) {
    masage := make(chan []byte, 1)
    // 中间处理的逻辑
    mass:=<-masage
    w.Write(mass)
}

相关文章

  • rpc demo

    client server

  • RPC demo

    RPC Server端代码,主要是使用ServerSocket获得rpc调用客户端发送过来的类信息,方法信息及方法...

  • RPC - Thrift Demo

    1. 前言 解决应用程序与服务器传递数据的问题,大体上分为三类: SOA模型(面向消息) RPC模型(面向方法) ...

  • Go RPC demo

    模拟RPC调用 server.go client.go client2.go 多参数把多参数封装入结构体中 add...

  • RPC简单Demo

    code:https://github.com/ice-kumangcao/JavaDemo/tree/maste...

  • 虚幻4网络入门 完成一个简单的在线聊天系统

    我使用UMG和RPC制作了一个简单的聊天Demo。 它的工作方式是使用RPC函数向服务器发送消息,使用GameSt...

  • grpc+consul

    最近在学习研究golang的rpc框架,这两天学习了grpc,学习demo,https://github.com/...

  • rpc系列1-10 minute Tutorial

    一个简单的rpc demo 最近在网上看到阿里巴巴2015年的中间件性能挑战赛的一个题目,实现一个简单的RPC框架...

  • RPC之thrift-简单demo

    Thrift简介 Apache thrift是一个软件框架,目的是提供可伸缩、跨语言的服务开发,连接code栈和c...

  • Socket连接Demo&&长连接Demo

    一、Socket Demo netty可以用来作为socket开发,以rpc的方式,支持自定义协议,这很适用于微服...

网友评论

      本文标题:rpc demo

      本文链接:https://www.haomeiwen.com/subject/prswoftx.html