Git Product home page Git Product logo

gotcp's Issues

有个疑问

closechan里的消息, 是在什么地方放进去的?
而且 read, handle, 和write三个loop都会去接收里面的消息, 然后执行关闭操作.
那其余两个没收到, 会因为close(chan)而关闭其余的goroutine吗?

waitGroup.Add(1) 不能放置于 goroutine 内部

wg := sync.WaitGroup{}
go func() {
  wg.Add(1)
  defer wg.Done()
}()
wg.Wait()

这样的代码会出现预想 goroutine 还没来得及被调度,主 goroutine 就已经执行到 wg.Wait() 直接 Game Over

正确的处理应该是:

wg := sync.WaitGroup{}
wg.Add(1)
go func() {
  defer wg.Done()
}()
wg.Wait()

wg.Add(1)wg.Wait() 需要在同一个 goroutine 中。使用 go run -race 也会提示 DATA RACE

具体如下:

$ go run -race examples/echo/server/server.go
listening: [::]:8989
^CSignal:  interrupt
==================
WARNING: DATA RACE
Write by main goroutine:
  sync.raceWrite()
      /usr/local/Cellar/go/1.5.1/libexec/src/sync/race.go:41 +0x2e
  sync.(*WaitGroup).Wait()
      /usr/local/Cellar/go/1.5.1/libexec/src/sync/waitgroup.go:124 +0xf9
  github.com/gansidui/gotcp.(*Server).Stop()
      /Users/larry/src/github.com/gansidui/gotcp/server.go:63 +0x6a
  main.main()
      /Users/larry/src/github.com/gansidui/gotcp/examples/echo/server/server.go:63 +0x9cf

Previous read by goroutine 7:
  sync.raceRead()
      /usr/local/Cellar/go/1.5.1/libexec/src/sync/race.go:37 +0x2e
  sync.(*WaitGroup).Add()
      /usr/local/Cellar/go/1.5.1/libexec/src/sync/waitgroup.go:66 +0xfa
  github.com/gansidui/gotcp.(*Server).Start()
      /Users/larry/src/github.com/gansidui/gotcp/server.go:35 +0x52

Goroutine 7 (running) created at:
  main.main()
      /Users/larry/src/github.com/gansidui/gotcp/examples/echo/server/server.go:54 +0x415
==================
Found 1 data race(s)
exit status 66

异步服务有些问题.

通过三个goroutine异步去服务一个连接, 是一个比较好的考虑.
但是通过select去一个chan里拿数据:https://github.com/gansidui/gotcp/blob/master/conn.go#L141
会存在一定的问题.
如果服务器还在write数据, 此时readloop继续去chan里select数据, 结果为eof, 这样会导致defer关闭conn,从而阻断服务器写数据的操作, 引起客户端异常.

ReadPacket后,未调用 OnMessage

仿照echo server写了接收程序,在ReadPacket可正常接收数据,而数据时常无法传递到OnMessage。
已经设置PacketReceiveChanLimit=200000
不知道其他朋友是否遇到此问题,打算尝试gtcp

请问gotcp 框架的处理性能你有测试过吗?

请问gotcp 框架的处理性能你有测试过吗?
安装下列两种情况,使用gotcp作为server端的处理性能大概是多少呢?
1.client---->gotcp_server 这种情况下的gotcp_server 的处理量是多少每秒?
2.client---->interface---->gotcp_server 这种情况下的gotcp_server 的处理量是多少每秒?

请问如何优雅地使用gotcp框架做客户端?

我想用该框架开发一个后台系统,收到包之后顺序转发给后面的server1, 然后等待后端server1回包再请求server2,server2回包再给前端回包。
我的做法是在OnMessage里面创建goroutine使用tcp短连接发包后端server, 然后等待后端server回包。也就是SendAndRecv的过程,但是这样每个请求都要创建连接开销有点大。
另外想到的一种做法是参考异步网络框架,将连接后端server的socket也放到主线程中readloop,但是这样的话又需要维护一个状态机,不如协程做法复杂性低。请问楼主是怎么做的?

建议以树形结构维护客户端,新增连接池,多协议,增加事件回调等

server-->db_pool_conn
-->client_conns
-->add_port1<--->protocol(增加监听端口)
-->add_port2<--->protocol(tcp、udp、其他协议)

event--->conect
event--->close
event--->task(耗时任务)
event--->recieve
我觉得可以按照计划,一步步实现这些功能,这样就是一个强大的tcp框架了
以后再引入model、rpc等

ReadPacket只能一次返回一个包呀.

如果是telnetprotol中的例子。考虑一个粘包问题:
客户端连续发送:
echo 123 [\r\n]
echo 456 [\r\n]

这个时候ReadPacket只能处理echo 123,echo 456就被丢弃了..

请教一个问题

你好,
首先感谢您写的这个框架,有个疑问,在conn.go的101行,是不是有可能会导致崩溃?所以有一个recover?
谢谢

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.