1. 程式人生 > >GO語言 --socket.io

GO語言 --socket.io

broadcast logfile hub println ogg sta out his ror

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(
"\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 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\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