Skip to content
/ oud Public

一个使用go语言的muduo仿写网络库。

Notifications You must be signed in to change notification settings

haunanz/oud

Repository files navigation

oud

根据陈硕的《Linux多线程服务端编程 使用muduo C++网络库》中的muduo模型编写 muduo github地址:https://github.com/chenshuo/muduo

目的是为了简单的了解Reactor模模型在网络开发中的工作方式。

注意!注意!注意!
只适用于linux系统。

相比于muduo时用go语言来描写,这个go语言版的muduo有更少的代码量。
有几个muduo的功能还未实现,将在以后的版本实现。

  • 定时器
  • 空闲连接清除
  • keeplive
  • 简单消息分发器
  • 引入viper来管理各种配置
  • 简单length分包

未完成:

  • 单元测试和功能测试
  • 地址转换
  • 描述这个网络库的处理逻辑的文档
  • 示例程序演示功能
  • 引入编码器接口

示例

获取 go get github.com/haunanz/oud

简单的回声服务器。

package main

import (
	"fmt"
	"syscall"

	"github.com/haunanz/oud"
)

func main() {
	loop := oud.NewEventLoop()
	addr := syscall.SockaddrInet4{Port: 12345}
	server := oud.NewTCPServer(loop, &addr, "server name")
	server.SetConnectionCallback(onConnection)
	server.SetMessageCallback(onMessage)

	server.Start()
	loop.Loop()

}

// 处理连接的建立
func onConnection(conn *oud.TCPConnection) {
	if conn.Connected() {
		fmt.Printf("%s is connected\n", conn.Name())
	} 
}

// 处理消息
func onMessage(conn *oud.TCPConnection, buf *oud.Buffer) {
	data := buf.ReadSlice()
	fmt.Printf("%s recive %d bytes in:%d\n", conn.Name(), len(data), conn.FD())
	conn.Send(data)
	buf.Retrieve(len(data))
}

About

一个使用go语言的muduo仿写网络库。

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages