go-pitaya学习笔记(3)-小小的测试

14 篇文章 3 订阅

 学习笔记: 我家别墅靠大海/pitaya-learn

尝试集成功能:我家别墅靠大海/pitaya-game

如果你正在看此笔记,请你左边放笔记,右边放chatdemo的代码!!

我是按代码的顺序记的笔记

测试一下tcp。server 

服务器类型声明为game

组件名为testcomponet

写个one方法,客户端给我啥,我还给他啥,并且再额外推送一点数据。

package main

import (
	"context"
	"strings"

	"github.com/topfreegames/pitaya/v2"
	"github.com/topfreegames/pitaya/v2/acceptor"
	"github.com/topfreegames/pitaya/v2/component"
	"github.com/topfreegames/pitaya/v2/config"
)

type TestComponent struct {
	component.Base
	app pitaya.Pitaya
}

func NewTestComponent(app pitaya.Pitaya) *TestComponent {
	return &TestComponent{
		app: app,
	}
}

func (c *TestComponent) One(ctx context.Context, msg []byte) ([]byte, error) {
	s := c.app.GetSessionFromCtx(ctx)

	s.Push("one", "i get one message")
	s.Push("message", []byte("your message :"+string(msg)))

	return msg, nil
}

var app pitaya.Pitaya

func main() {

	// 配置
	conf := config.NewDefaultBuilderConfig()

	// 火龙果
	builder := pitaya.NewDefaultBuilder(true, "game", pitaya.Cluster, map[string]string{}, *conf)
	builder.AddAcceptor(acceptor.NewTCPAcceptor(":8999"))
	app = builder.Build()
	defer app.Shutdown()

	tc := NewTestComponent(app)
	app.Register(tc, component.WithName("testcomponent"), component.WithNameFunc(strings.ToLower))

	app.Start()

}

由于通信是火龙果内部封装的,我们这边直接用他的client。

他这个调用请求的url,实际上是 -> 服务器类型.组件名.方法名

如果服务器类型和组件名一样的话,可以省略服务器类型

例如:服务器类型也是testcomponent

那么直接请求testcomponent.one就行了,不用game.

文档:Pitaya API — Pitaya documentation

package main

import (
	"fmt"
	"time"

	"github.com/sirupsen/logrus"
	"github.com/topfreegames/pitaya/v2/client"
)

func main() {

	c := client.New(logrus.InfoLevel, 100*time.Millisecond)
	err := c.ConnectTo("127.0.0.1:8999")
	if err != nil {
		fmt.Println(" conn server error :", err)
		return
	}

	go func(c client.Client) {
		for {
			select {
			case data := <-c.MsgChannel():
				if data.Err {
					fmt.Println("error :", string(data.Data))
					break
				}
				fmt.Println("data --------------", string(data.Data))
			}
		}

	}(*c)

	for {
		_, err := c.SendRequest("game.testcomponent.one", []byte("hello"))
		if err != nil {
			fmt.Println("send request error")
			return
		}
		time.Sleep(time.Second)
	}

}

再测试一下用结构体包裹参数

server这边一定要注意,message ,respone必须是指针

type TestMessage struct {
	Message string `json:"message"`
}
type TestRespone struct {
	Code int `json:"code"`
}
func (c *TestComponent) Two(ctx context.Context, msg *TestMessage) (*TestRespone, error) {
	s := c.app.GetSessionFromCtx(ctx)

	s.Push("two", "i get 2 message:"+msg.Message)
	return &TestRespone{Code: 1}, nil
}

学习笔记4

go-pitaya学习笔记(4)-clusterdemo分析_冰纳-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值