首页 > 代码库 > GO语言 --socket.io

GO语言 --socket.io

socket.io是对websocket的封装以及扩展, 可以跨平台使用, 具体可看官网..

GO语言实现:

package mainimport (    "github.com/googollee/go-socket.io"    "github.com/nicholaskh/log4go"    "net/http"    "os"    "time"    "path"    "strings"    "runtime"    "fmt")var gLogger log4go.Logger;//do init before all othersfunc initAll(){    gLogger = nil    initLogger()}//de-init for allfunc deinitAll(){    if(nil == gLogger) {        gLogger.Close();        gLogger = nil    }}func main()  {    initAll()    server, err := socketio.NewServer(nil)    if err != nil {        gLogger.Warn("启动服务器错误")    }    server.On("connection", func(so socketio.Socket) {        gLogger.Info("on connection")        so.Join("chat")        so.On("chat message", func(msg string) {            m := make(map[string]interface{})            m["a"] = "你好"            e := so.Emit("cn1111", m)            //这个没有问题            fmt.Println("\n\n")            b := make(map[string]string)            b["u-a"] = "中文内容" //这个不能是中文            m["b-c"] = b            e = so.Emit("cn2222", m)            gLogger.Info(e)            gLogger.Info("emit:", so.Emit("chat message", msg))            so.BroadcastTo("chat", "chat message", msg)        })        // Socket.io acknowledgement example        // The return type may vary depending on whether you will return        // For this example it is "string" type        so.On("chat message with ack", func(msg string) string {            return msg        })        so.On("disconnection", func() {            gLogger.Info("on disconnect")        })    })    server.On("error", func(so socketio.Socket, err error) {        gLogger.Warn("ERROR: ", err)    })    http.Handle("/socket.io/", server)    http.Handle("/", http.FileServer(http.Dir("/Users/deer_mac/Downloads/go-socket.io-master/example/chat/Public")))    gLogger.Info("Serving at localhost:5000...")    http.ListenAndServe(":5000", nil)    deinitAll()}// GetCurFilename// Get current file name, without suffixfunc GetCurFilename() string {    _, fulleFilename, _, _ := runtime.Caller(0)    //fmt.Println(fulleFilename)    var filenameWithSuffix string    filenameWithSuffix = path.Base(fulleFilename)    //fmt.Println("filenameWithSuffix=", filenameWithSuffix)    var fileSuffix string    fileSuffix = path.Ext(filenameWithSuffix)    //fmt.Println("fileSuffix=", fileSuffix)    var filenameOnly string    filenameOnly = strings.TrimSuffix(filenameWithSuffix, fileSuffix)    //fmt.Println("filenameOnly=", filenameOnly)    return filenameOnly}//init for loggerfunc initLogger(){    var filenameOnly string    filenameOnly = GetCurFilename()    var logFilename string =  filenameOnly + ".log";    //gLogger = log4go.NewLogger()    gLogger = make(log4go.Logger)    //for console    //gLogger.AddFilter("stdout", log4go.INFO, log4go.NewConsoleLogWriter())    gLogger.AddFilter("stdout", log4go.INFO, log4go.NewConsoleLogWriter())    //for log file    if _, err := os.Stat(logFilename); err == nil {        //fmt.Printf("found old log file %s, now remove it\n", logFilename)        os.Remove(logFilename)    }    //gLogger.AddFilter("logfile", log4go.FINEST, log4go.NewFileLogWriter(logFilename, true))    gLogger.AddFilter("logfile", log4go.FINEST, log4go.NewFileLogWriter(logFilename, false))    gLogger.Info("Current time is : %s", time.Now().Format("15:04:05 MST 2006/01/02"))    return}

 

GO语言 --socket.io