go 作为一个后端开发语言,一般都用来开发服务端。
网络上也很少有golang做socket 客户端的示例代码,因项目需求,我自己开发过相关功能,写出来跟大家一起学习一下!
有错误及需要改进的地方,还请指正!
项目需求:给测试提供一个能模拟多客户端进出游戏服务器的脚本,刚开始想使用python开发,比较是脚本语言首选,但是需要打包成exe,股使用go语言进行开发。
废话不多说,上代码:
package main
import (
"encoding/json"
"flag"
"fmt"
"io/ioutil"
"log"
"math/rand"
"net/http"
"net/url"
"os"
"os/signal"
"strings"
"sync"
"time"
"code.google.com/p/go.net/websocket"
)
func (l *LoginCheck) samplePost(pattern string, data map[string]interface{}) []byte {
reqParams := make(map[string]interface{})
reqParams["head"] = pattern
dataBuf, err := json.Marshal(data)
if err != nil {
panic(err)
}
reqParams["data"] = string(dataBuf)
bytesData, err := json.Marshal(reqParams)
if err != nil {
panic(err)
}
loginUrl := fmt.Sprintf("http://%s:%s/login", l.Host, l.Port)
req, err := http.PostForm(loginUrl, url.Values{
"msgdata": {
string(bytesData)}})
if err != nil {
l.Info("error:%v", err)
l.Exit(err.Error())
}
defer req.Body.Close()
body, err := ioutil.ReadAll(req.Body)
if err != nil {
l.Info("error:%v", err)
l.Exit(err.Error())
}
return body
}
//LoginYKResp 登录返回数据
type LoginYKResp struct {
ErrCode int64 `json:"errcode"`
Data string `json:"data"`
}
//LoginData 登录返回数据内容
type LoginData struct {
Hall string `json:"hall&