zoukankan      html  css  js  c++  java
  • GO语言 --socket.io

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

    GO语言实现:

    package main
    
    import (
        "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 others
    func initAll(){
        gLogger = nil
    
        initLogger()
    }
    
    //de-init for all
    func 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("
    
    ")
    
                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 suffix
    func 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 logger
    func 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
    ", 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
    }
  • 相关阅读:
    dapper中使用类似whereif语句
    xamarin开发常见错误总结Sqlite本地数据库使用了保留字段导致语法错误
    vs2019C#代码规范设置命名规范
    xamarin在visual studio中遇到的包还原问题
    基础知识除数vs被除数
    xaf代码注册module
    xaf手动注册module之WebForm
    xamarin开发常见错误总结the operation was canceled
    JDK源码分析实战系列ThreadLocal
    公众号文章汇总
  • 原文地址:https://www.cnblogs.com/mafeng/p/6867804.html
Copyright © 2011-2022 走看看