{"id":37182293,"url":"https://github.com/dyowoo/easysocket","last_synced_at":"2026-01-14T21:01:13.276Z","repository":{"id":57662722,"uuid":"478785054","full_name":"dyowoo/easysocket","owner":"dyowoo","description":"基于Golang的轻量级并发网络服务框架，支持tcp socket 和websocket，内置支持protocol buffer","archived":false,"fork":false,"pushed_at":"2022-12-09T01:55:48.000Z","size":4821,"stargazers_count":5,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-06-20T02:08:31.435Z","etag":null,"topics":["gameserver","go","golang","socket","websocket"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dyowoo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-04-07T01:33:04.000Z","updated_at":"2024-03-22T10:56:50.000Z","dependencies_parsed_at":"2023-01-25T20:45:33.310Z","dependency_job_id":null,"html_url":"https://github.com/dyowoo/easysocket","commit_stats":null,"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/dyowoo/easysocket","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dyowoo%2Feasysocket","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dyowoo%2Feasysocket/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dyowoo%2Feasysocket/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dyowoo%2Feasysocket/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dyowoo","download_url":"https://codeload.github.com/dyowoo/easysocket/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dyowoo%2Feasysocket/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28434517,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T18:57:19.464Z","status":"ssl_error","status_checked_at":"2026-01-14T18:52:48.501Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gameserver","go","golang","socket","websocket"],"created_at":"2026-01-14T21:01:12.421Z","updated_at":"2026-01-14T21:01:13.252Z","avatar_url":"https://github.com/dyowoo.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# easysocket\n\neasysocket 是一个基于Golang的轻量级并发网络服务框架，支持tcp socket和websocket。内置支持protocol buffer\n\n```shell\ngo get github.com/dyowoo/easysocket\n```\n\n## Example\n\n### server\n\n```go\npackage main\n\nimport (\n\t\"github.com/dyowoo/easysocket\"\n\t\"github.com/dyowoo/easysocket/example/server/ProtoMsg\"\n\t\"github.com/dyowoo/easysocket/example/server/routers\"\n)\n\nfunc main() {\n\ts := easysocket.NewServer(\"server\", easysocket.TcpServer, \"0.0.0.0\", 29000)\n\n\ts.AddRouter(int32(ProtoMsg.CMD_PING), \u0026routers.PingRouter{}, ProtoMsg.C2S_Ping{})\n\n\tgo s.Serve()\n\n\tselect {}\n}\n```\n\n#### router\n```go\npackage routers\n\nimport (\n\t\"fmt\"\n\t\"github.com/dyowoo/easysocket\"\n\t\"github.com/dyowoo/easysocket/example/server/ProtoMsg\"\n\t\"google.golang.org/protobuf/proto\"\n)\n\ntype PingRouter struct {\n\teasysocket.BaseRouter\n}\n\nfunc (r *PingRouter) Handle(request easysocket.IRequest, message proto.Message) {\n\tmsg := message.(*ProtoMsg.C2S_Ping)\n\n\tfmt.Println(\"===\u003e client msgId: \", request.GetMsgId(), \" msg: \", msg.GetPing())\n\n\tpong := ProtoMsg.S2C_Pong{\n\t\tPong: \"pong\",\n\t}\n\n\tbuffer, err := proto.Marshal(proto.Message(\u0026pong))\n\n\tif err != nil {\n\t\tfmt.Println(err.Error())\n\t\treturn\n\t}\n\n\t_ = request.GetSession().SendBuffMsg(int32(ProtoMsg.CMD_PONG), buffer)\n}\n```\n\n### client\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"github.com/dyowoo/easysocket\"\n\t\"github.com/dyowoo/easysocket/example/server/ProtoMsg\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"io\"\n\t\"net\"\n\t\"time\"\n)\n\nfunc main() {\n\tconn, err := net.Dial(\"tcp\", \"127.0.0.1:29000\")\n\n\tif err != nil {\n\t\tfmt.Println(err.Error())\n\t\treturn\n\t}\n\n\tgo func() {\n\t\tfor {\n\t\t\tdp := easysocket.NewDataPack()\n\n\t\t\tping := \u0026ProtoMsg.C2S_Ping{\n\t\t\t\tPing: \"ping\",\n\t\t\t}\n\n\t\t\tbuffer, _ := proto.Marshal(ping)\n\n\t\t\tmsg := dp.Pack(easysocket.NewMessage(int32(ProtoMsg.CMD_PING), buffer))\n\n\t\t\t_, err := conn.Write(msg)\n\n\t\t\tif err != nil {\n\t\t\t\tfmt.Println(err.Error())\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\theadData := make([]byte, dp.GetHeadLen())\n\t\t\t_, err = io.ReadFull(conn, headData)\n\n\t\t\tif err != nil {\n\t\t\t\tfmt.Println(err.Error())\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tmsgHead := dp.UnPack(headData)\n\n\t\t\tif msgHead.GetDataLen() \u003e 0 {\n\t\t\t\tmsg := msgHead.(*easysocket.Message)\n\n\t\t\t\tdata := make([]byte, msg.GetDataLen())\n\t\t\t\t_, err := io.ReadFull(conn, data)\n\t\t\t\tif err != nil {\n\t\t\t\t\tfmt.Println(err.Error())\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tmsg.SetData(data)\n\n\t\t\t\tfmt.Println(\"===\u003e ping recv msgId:\", msg.GetMsgId(), \", len:\", msg.GetDataLen(), \", data:\", string(data))\n\t\t\t}\n\n\t\t\ttime.Sleep(1 * time.Second)\n\t\t}\n\t}()\n\n\tselect {}\n}\n```\n\n```\nupstream proxy_server {\n        server 127.0.0.1:19000;\n}\n\nserver {\n        listen 443 ssl;\n        server_name xxx.xxx.com;\n        location / {\n                proxy_pass http://proxy_server;\n                proxy_http_version 1.1;\n                proxy_set_header Upgrade $http_upgrade;\n                proxy_set_header Host $host;\n                proxy_set_header X-Real-IP $remote_addr;\n                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n                proxy_set_header Connection \"upgrade\";\n                proxy_connect_timeout 30d;\n                proxy_send_timeout 30d;\n                proxy_read_timeout 30d;\n        }\n        keepalive_timeout 999999999s;\n        ssl_certificate cert/xxx.pem;  #需要将cert-file-name.pem替换成已上传的证书文件的名称。\n        ssl_certificate_key cert/xxx.key; #需要将cert-file-name.key替换成已上传的证书密钥文件的名称。\n        ssl_session_timeout 99999999m;\n        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;\n        #表示使用的加密套件的类型。\n        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #表示使用的TLS协议的类型。\n        ssl_prefer_server_ciphers on;\n}\n\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdyowoo%2Feasysocket","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdyowoo%2Feasysocket","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdyowoo%2Feasysocket/lists"}