ichenq

第 4191 号会员 /

回复了 baiyuxiong 创建的主题: 有没有这样的开源tcp服务?

这些都不难。

1、TCP Server
使用net包即可

2、可以管理无数个终端连接
使用一个map作为所有TCPConn的容器,再加mutex支持线程安全

3、管理终端的上线、心跳、下线
上线就是终端connect上来,
心跳就是终端每隔X秒发消息过来,
下线就是Read()返回error

4、每个终端有ID,可以在后台或者接口向指定的终端发消息
用一个int在配合atomic做自增即可

这些在Go里面已经很好做了,
其实最麻烦是协议解析部分

回复了 mysll 创建的主题: go的protobuf这个问题是不是一个bug?

在执行protoc命令的时候,例如:
protoc --go_out=. a.proto

如果a.proto文件import了b.proto,那么需要在命令行里包含b.proto,如:

protoc --go_out=. a.proto b.proto

或者简单点,把所有proto文件放在一个目录:

protoc --go_out=. *.proto

参考官方protobuf的issue 67

回复了 ohko 创建的主题: 超长float64位计算,不知是BUG还是使用错误,请高人指教!

我的没有任何问题啊, go 1.5, Ubuntu 14.04


func main() {
    var a float64 = 12959653081233152683760791820268915873095215894259158297207384037775798390732947435759407568730776231939495920976951779674164698735094020653357745276190720
    var b float64 = 38702708391292475707970394122420465445262695173878312073868790125970680813462212621273021068406482338979482750490461442604850467520473202688
    c := "12959653081233191386469183112744623843489338314724603559902557916087872259523073406440221030943397504960564327459290759156915189196536625503825265749393408"
    var sum = strconv.FormatFloat(a+b, 'f', 0, 64)
    fmt.Println(sum)
    fmt.Println("equal:", sum == c)
}