本文整理汇总了Golang中github.com/funny/link.Serve函数的典型用法代码示例。如果您正苦于以下问题:Golang Serve函数的具体用法?Golang Serve怎么用?Golang Serve使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Serve函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: StreamTest
func StreamTest(t *testing.T, callback func(*link.Session)) {
protocol := New(1024, 1024, 1024)
server, err := link.Serve("tcp", "0.0.0.0:0", protocol)
unitest.NotError(t, err)
addr := server.Listener().Addr().String()
go server.Serve(func(session *link.Session) {
for {
var msg TestMessage
if err := session.Receive(&msg); err != nil {
break
}
if err := session.Send(msg); err != nil {
break
}
}
})
session, err := link.Connect("tcp", addr, protocol)
unitest.NotError(t, err)
callback(session)
session.Close()
server.Stop()
MakeSureSessionGoroutineExit(t)
}
示例2: PacketTest
func PacketTest(t *testing.T, callback func(*link.Session)) {
protocol := New(binary.SplitByUvarint, 1024, 1024, 1024)
server, err := link.Serve("tcp", "0.0.0.0:0", protocol)
unitest.NotError(t, err)
go server.Serve(func(session *link.Session) {
for {
var msg RAW
if err := session.Receive(&msg); err != nil {
break
}
if err := session.Send(msg); err != nil {
break
}
}
})
session, err := link.Connect("tcp", server.Listener().Addr().String(), protocol)
unitest.NotError(t, err)
callback(session)
session.Close()
server.Stop()
MakeSureSessionGoroutineExit(t)
}
示例3: main
func main() {
var addr string
flag.StringVar(&addr, "addr", ":10010", "echo server address")
flag.Parse()
server, err := link.Serve("tcp", addr, link.Packet(2, 1024*1024, 1024, binary.LittleEndian, TestCodec{}))
if err != nil {
panic(err)
}
println("server start:", server.Listener().Addr().String())
for {
session, err := server.Accept()
if err != nil {
break
}
go func() {
//addr := session.Conn().RemoteAddr().String()
//println("client", addr, "connected")
for {
var msg []byte
if err = session.Receive(&msg); err != nil {
break
}
if err = session.Send(msg); err != nil {
break
}
}
//println("client", addr, "closed")
}()
}
}
示例4: main
func main() {
flag.Parse()
server, err := link.Serve("tcp", *addr, packet.New(
binary.SplitByUint16BE, 1024, 1024, 1024,
))
if err != nil {
panic(err)
}
println("server start:", server.Listener().Addr().String())
server.Serve(func(session *link.Session) {
addr := session.Conn().RemoteAddr().String()
log(addr, "connected")
for {
var msg packet.RAW
if err := session.Receive(&msg); err != nil {
break
}
log(addr, "say:", string(msg))
if err = session.Send(msg); err != nil {
break
}
}
log(addr, "closed")
})
}
示例5: startLocalServer
func startLocalServer() {
//连接DB
db.Init()
//连接Redis
redisProxyErr := redisProxy.InitClient(cfg.GetValue("redis_ip"), cfg.GetValue("redis_port"))
checkError(redisProxyErr)
listener, err := link.Serve("tcp", "0.0.0.0:"+local_port, packet.New(
binary.SplitByUint32BE, 1024, 1024, 1024,
))
checkError(err)
listener.Serve(func(session *link.Session) {
session.AddCloseCallback(session, func() {
session.Close()
})
global.AddSession(session)
var msg packet.RAW
for {
if err := session.Receive(&msg); err != nil {
break
}
module.ReceiveMessage(session, msg)
}
})
}
示例6: StartTestBackend
func StartTestBackend(t *testing.T, handler func(*link.Session)) *link.Server {
backend, err := link.Serve("tcp", "0.0.0.0:0", NewBackend(
1024, 1024, 1024,
))
unitest.NotError(t, err)
go backend.Serve(handler)
return backend
}
示例7: main
func main() {
var addr string
flag.StringVar(&addr, "addr", ":10010", "echo server address")
flag.Parse()
server, err := link.Serve("tcp://"+addr, link.Stream(), nil)
if err != nil {
panic(err)
}
println("server start:", server.Listener().Addr().String())
server.Loop(link.Echo)
}
示例8: main
// This is broadcast server demo work with the echo_client.
// usage:
// cd src/github.com/funny/link
// go generate channel.go
// go run example/echo/broadcast.go
func main() {
var addr string
flag.StringVar(&addr, "addr", ":10010", "echo server address")
flag.Parse()
server, err := link.Serve("tcp", addr, link.Async(1024, link.Packet(2, 1024*1024, 1024, binary.LittleEndian, TestCodec{})))
if err != nil {
panic(err)
}
println("server start:", server.Listener().Addr().String())
channel := link.NewUint64Channel()
go func() {
for range time.Tick(time.Second * 2) {
now := "from channel: " + time.Now().Format("2006-01-02 15:04:05")
channel.Fetch(func(session *link.Session) {
session.Send(now)
})
}
}()
for {
session, err := server.Accept()
if err != nil {
break
}
go func() {
addr := session.Conn().RemoteAddr().String()
println("client", addr, "connected")
channel.Put(session.Id(), session)
for {
var msg string
if err := session.Receive(&msg); err != nil {
break
}
println(addr, "say:", msg)
channel.Fetch(func(session *link.Session) {
session.Send("from " + addr + ": " + string(msg))
})
}
println("client", addr, "closed")
channel.Remove(session.Id())
}()
}
}
示例9: main
// This is broadcast server demo work with the echo_client.
// usage:
// go run echo_broadcast.go
func main() {
var addr string
flag.StringVar(&addr, "addr", ":10010", "echo server address")
flag.Parse()
server, err := link.Serve("tcp", addr, link.String(link.Uint16BE))
if err != nil {
panic(err)
}
println("server start:", server.Listener().Addr().String())
channel := link.NewChannel()
go func() {
for range time.Tick(time.Second * 2) {
now := time.Now().Format("2006-01-02 15:04:05")
channel.Broadcast("from channel: " + now)
}
}()
for {
session, err := server.Accept()
if err != nil {
break
}
go func() {
addr := session.Conn().RemoteAddr().String()
println("client", addr, "connected")
session.EnableAsyncSend(1024)
channel.Join(session)
for {
var msg string
if err := session.Receive(&msg); err != nil {
break
}
println(addr, "say:", msg)
channel.Broadcast("from " + addr + ": " + string(msg))
}
println("client", addr, "closed")
channel.Exit(session)
}()
}
}
示例10: InitServer
//初始化
func InitServer(port string) error {
servers = make(map[string]*link.Session)
asyncMsgs = list.New()
db.Init()
startSysDB()
createRevGoroutines()
listener, err := link.Serve("tcp", "0.0.0.0:"+port, packet.New(
binary.SplitByUint32BE, 1024, 1024, 1024,
))
if err != nil {
return err
}
listener.Serve(func(session *link.Session) {
for {
var msg packet.RAW
if err := session.Receive(&msg); err != nil {
break
}
msgID := binary.GetUint16LE(msg[:2])
if systemProto.IsValidID(msgID) {
//系统消息
dealReceiveSystemMsgC2S(session, msg)
} else if dbProto.IsValidAsyncID(msgID) {
//异步DB消息
asyncMsgs.PushBack(msg)
} else {
//同步DB消息
useObj := revSyncMsgGoroutines[revSyncMsgGoroutineIndex]
useObj.revMsgChan <- goroutineMsg{msg, session}
revSyncMsgGoroutineIndex++
if revSyncMsgGoroutineIndex == revSyncMsgGoroutineNum {
revSyncMsgGoroutineIndex = 0
}
}
}
})
return nil
}
示例11: StartEchoBackend
func StartEchoBackend() (*link.Server, error) {
backend, err := link.Serve("tcp://0.0.0.0:0", NewBackend(), link.Bytes())
if err != nil {
return nil, err
}
go backend.Loop(func(session *link.Session) {
var msg []byte
for {
if err := session.Receive(&msg); err != nil {
break
}
if err := session.Send(msg); err != nil {
break
}
}
})
return backend, nil
}
示例12: main
func main() {
var addr string
var pro bool
flag.StringVar(&addr, "addr", ":10010", "echo server address")
flag.BoolVar(&pro, "pro", true, "use PacketPro()")
flag.Parse()
var codecType link.CodecType
if pro {
pool := binary.NewBufferPool(2, 1, 32)
codecType = link.PacketPro(2, 1024*1024, 1024, link.LittleEndian, pool, TestCodec{})
} else {
codecType = link.Packet(2, 1024*1024, 1024, link.LittleEndian, TestCodec{})
}
server, err := link.Serve("tcp", addr, codecType)
if err != nil {
panic(err)
}
println("server start:", server.Listener().Addr().String())
for {
session, err := server.Accept()
if err != nil {
break
}
go func() {
//addr := session.Conn().RemoteAddr().String()
//println("client", addr, "connected")
for {
var msg []byte
if err = session.Receive(&msg); err != nil {
break
}
if err = session.Send(msg); err != nil {
break
}
}
//println("client", addr, "closed")
}()
}
}
示例13: main
func main() {
var addr string
flag.StringVar(&addr, "addr", ":10010", "echo server address")
flag.Parse()
server, err := link.Serve("tcp", addr, codec.Bytes(codec.Uint16BE))
if err != nil {
panic(err)
}
println("server start:", server.Listener().Addr().String())
for {
session, err := server.Accept()
if err != nil {
break
}
go io.Copy(session.Conn(), session.Conn())
}
}
示例14: main
func main() {
funnk()
go tcp_test()
go func() {
var addr string
flag.StringVar(&addr, "addr", ":10010", "echo server address")
flag.Parse()
fmt.Println("addr:", addr)
server, err := link.Serve("tcp", addr, codec.Bytes(codec.Uint16BE))
if err != nil {
panic(err)
}
println("server start:", server.Listener().Addr().String())
for {
session, err := server.Accept()
if err != nil {
break
}
go io.Copy(session.Conn(), session.Conn())
}
}()
fmt.Println(test1)
fmt.Println("ssssssssssssssssss")
test_struct(&test2{})
test_struct(&test2{})
test_struct(&test2{})
test_struct(&test2{})
test_struct(&test2{})
http.HandleFunc("/", sayhelloName)
http.HandleFunc("/login/", login)
http.HandleFunc("/upload/", upload)
// amqp_connect()
err := http.ListenAndServe(":9099", nil) //设置监听的端口
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
示例15: startGateway
func startGateway() {
listener, err := link.Serve("tcp", "0.0.0.0:"+gateway_port, packet.New(
binary.SplitByUint32BE, 1024, 1024, 1024,
))
checkError(err)
listener.Serve(func(session *link.Session) {
session.AddCloseCallback(session, func() {
transferProxy.SendClientSessionOffline(session.Id())
})
transferProxy.SendClientSessionOnline(session)
var msg packet.RAW
for {
if err := session.Receive(&msg); err != nil {
break
}
transferProxy.SendToTransferServer(msg, session)
}
})
}