无法使名称空间在go-socketio中运行

时间:2015-01-16 11:20:04

标签: go socket.io

我正在使用https://github.com/googollee/go-socket.io来创建socket.io服务器。我正在尝试创建一个命名空间,但我无法从客户端连接到命名空间。

服务器:

func registerHandlers(server *socketio.Server) {
    server.Of("room1").On("connection", connectionHandler)
}

func connectionHandler(so socketio.Socket) {
    log.Println("on connection")
    so.Join("chat")
    so.On("chat message", func(msg string) {
        so.BroadcastTo("chat", "chat message", msg)
    })
}

客户端:

var socket = io.connect("http://localhost:3000/room1");
socket.on('chat message', function(msg){
        $('#messages').append($('<li>').text(msg));
      });

我错过了什么吗?

4 个答案:

答案 0 :(得分:1)

该软件包中的命名空间功能似乎已被破坏。参见:

答案 1 :(得分:0)

您希望在命名空间前加斜杠。 您作为示例提供的代码将变为:

func registerHandlers(server *socketio.Server) {
    server.Of("/room1").On("connection", connectionHandler)
}

试一试。

答案 2 :(得分:0)

使用此示例:

package main

import (
    "log"
    "net/http"
    "github.com/googollee/go-socket.io"
)


func main() {


    server, err := socketio.NewServer(nil)
    if err != nil {
        log.Fatal(err)
    }
    // server.SetMaxConnection(9000000);

    server.On("connection", func(so socketio.Socket) {
        log.Println("on connection")
        log.Println(so.Id())



        so.On("CHAT", func(msg string) {
            log.Println("CHAT +++++++>"   , msg)
        })


        so.On("server", func(msg string) {
            log.Println("serverpublic  =====>  "   , msg)
        })



        so.On("disconnection", func() {
            log.Println("on disconnect")
        })

    })


    server.On("error", func(so socketio.Socket, err error) {
        log.Println("error:", err)
    })


    http.Handle("/socket.io/", server)
    log.Println("Serving at localhost:16900...")
    log.Fatal(http.ListenAndServe(":15900", nil))
}//main

答案 3 :(得分:-4)

在服务器端

默认情况下,socket.io在默认命名空间(/)

中工作
var io = require('socket.io')(http);

您可以从默认创建名称空间。

var nmspc = io.of('/namespace');

现在,您可以在您的custum命名空间内发送和接收消息。

nmspc.on('connection', function(socket){
     socket.on('', function(){ 
        ...
     });

}

在客户端端,您可以使用以下

连接到命名空间
var socket = io('/namespace').connect('http://url:PORT');

我希望这能涵盖socket.io

中有关命名空间的问题