golang的游戏服务器框架有挺多的, 大体上一个游戏成品的客户端, 都需要接入账号系统和其他分类的系统.
这里为了简单化, 先开一个最简单的TCPServer服务器端(网络上的各种服务器框架大同小异, 这里选择用266的tcp框架. 其实是一个意思)
package main
import (
"log"
"time"
connection "github.com/266game/goserver/Connection"
tcpserver "github.com/266game/goserver/TCPServer"
)
func main() {
// 启动服务器
pServer := tcpserver.NewTCPServer()
pServer.OnRead = func(pData *connection.TData) {
// 这里是服务器收到的内容
}
// 开启一个新的端口 12345
pServer.Start(":12345")
// 这里暂时弄一个5000小时的等待, 不然进程就直接关闭了.
time.Sleep(time.Hour * 5000 )
}
客户端因为要操作, 得有一个带界面的库, 这里选择用govcl的客户端界面库
package main
import (
"log"
connection "github.com/266game/goserver/Connection"
tcpclient "github.com/266game/goserver/TCPClient"
"github.com/ying32/govcl/vcl"
)
// TMainForm 主窗体
type TMainForm struct {
*vcl.TForm
Btn1 *vcl.TButton
pClient *tcpclient.TTCPClient
}
var mainForm *TMainForm
func main() {
vcl.Application.Initialize() // 应用初始化
vcl.Application.SetMainFormOnTaskBar(true) // 设置主窗口在任务栏上显示
vcl.Application.CreateForm(&mainForm) // 创建主窗口
vcl.Application.Run() // 程序运行
}
// -- TMainForm
// OnFormCreate 主窗口创建事件
func (self *TMainForm) OnFormCreate(sender vcl.IObject) {
self.SetCaption("这是一个游戏服务器")
self.Btn1 = vcl.NewButton(self) // 创建按钮
self.Btn1.SetParent(self) //设置爸爸
self.Btn1.SetBounds(10, 10, 88, 28) //设置位置
self.Btn1.SetCaption("开始连接") //
self.Btn1.SetOnClick(self.OnButtonClick) // 绑定按钮1点击事件
}
// OnButtonClick 按钮点击事件
func (self *TMainForm) OnButtonClick(sender vcl.IObject) {
// 创建一个客户端
pClient := tcpclient.NewTCPClient()
// 保存指针
self.pClient = pClient
// 客户端收到消息事件
pClient.OnRead = func(*connection.TData) {
}
// 连接成功事件
pClient.OnConnect = func(pConn *connection.TConnection) {
self.Btn1.SetCaption("连接成功")
log.Println(pConn.GetTCPConn().RemoteAddr().String() + "连接成功")
}
self.Btn1.SetCaption("连接中")
self.Btn1.SetEnabled(false)
// 可以开始连接了
pClient.Connect("127.0.0.1:12345")
}
//
启动以后大概是一个这样子的界面
本文需要用到的库
go build github.com/266game/goserver
go build github.com/ying32/govcl
go build github.com/golang/protobuf