博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GO语言 --socket.io
阅读量:7144 次
发布时间:2019-06-29

本文共 3321 字,大约阅读时间需要 11 分钟。

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}

 

转载地址:http://ilgrl.baihongyu.com/

你可能感兴趣的文章
一个老王开枪案例带你一步一步领略程序开发的魅力
查看>>
Head First Design Patterns
查看>>
2013-2014 ACM-ICPC Pacific Northwest Regional Contest题解
查看>>
win10安装VirtualBox+使用
查看>>
模型基础--mysql
查看>>
浅谈基于IP网络的H.264关键技术及应用
查看>>
GstStaticCaps的初始化
查看>>
async and await 简单的入门
查看>>
YL库无法启动
查看>>
DataGridView 控件
查看>>
IEnumerable,IQueryable的区别
查看>>
冲刺阶段第四天,4月22日。
查看>>
树和森林
查看>>
C++类指针初始化
查看>>
python面向对象编程进阶
查看>>
由一道很简单的求两条链表的第一个公共节点的问题引发的思考
查看>>
用tomcat部署和花生壳内网映射进行远程访问自己电脑上的网站
查看>>
JAVA入门到精通-第88讲-山寨QQ项目2-好友列表界面
查看>>
页面重绘与重排版的性能影响
查看>>
02图形初阶
查看>>