Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Native Message Broadcasting with Scale out is not working #45

Open
seraph911 opened this issue Jun 12, 2020 · 2 comments
Open

Native Message Broadcasting with Scale out is not working #45

seraph911 opened this issue Jun 12, 2020 · 2 comments
Labels
bug Something isn't working

Comments

@seraph911
Copy link

seraph911 commented Jun 12, 2020

Hi all,

I try to use scaling out function with native messages,
but it doesn't work out.

First of all, I tried to use Conn.Server().Broadcast with scaling out. However, it was not working, then I tried Conn.Server().Do func instead.
Clients connect to the same ws server are able to receive messages while using Do func, but clients connect to different servers are not.

Is there any way that I can use scaling out function with native message mode?

Glad to hear your advice.
Thank you very mush for your help.

package main

import (
	"log"

	"github.com/kataras/iris/v12"
	"github.com/kataras/iris/v12/websocket"
	"github.com/kataras/neffos/stackexchange/nats"
)

type clientPage struct {
	Title string
	Host  string
}

func main() {
	app := iris.New()

	app.RegisterView(iris.HTML("./templates", ".html")) // select the html engine to serve templates

	// Almost all features of neffos are disabled because no custom message can pass
	// when app expects to accept and send only raw websocket native messages.
	// When only allow native messages is a fact?
	// When the registered namespace is just one and it's empty
	// and contains only one registered event which is the `OnNativeMessage`.
	// When `Events{...}` is used instead of `Namespaces{ "namespaceName": Events{...}}`
	// then the namespace is empty "".
	ws := websocket.New(websocket.DefaultGorillaUpgrader, websocket.Events{
		websocket.OnNativeMessage: func(nsConn *websocket.NSConn, msg websocket.Message) error {
			log.Printf("Server got: %s from [%s]", msg.Body, nsConn.Conn.ID())

			nsConn.Conn.Server().Broadcast(nsConn, msg)
			return nil
		},
	})

	exc, err := nats.NewStackExchange("nats://nats-streaming:4222")
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	if err != nil {
		panic(err)
	}
	ws.UseStackExchange(exc)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

	ws.OnConnect = func(c *websocket.Conn) error {
		log.Printf("[%s] Connected to server!", c.ID())
		return nil
	}

	ws.OnDisconnect = func(c *websocket.Conn) {
		log.Printf("[%s] Disconnected from server", c.ID())
	}

	app.HandleDir("/js", "./static/js") // serve our custom javascript code.

	// register the server on an endpoint.
	// see the inline javascript code i the websockets.html, this endpoint is used to connect to the server.
	app.Get("/my_endpoint", websocket.Handler(ws))

	app.Get("/", func(ctx iris.Context) {
		ctx.View("client.html", clientPage{"Client Page", "localhost:80"})
	})

	// Target some browser windows/tabs to http://localhost:8080 and send some messages,
	// see the static/js/chat.js,
	// note that the client is using only the browser's native WebSocket API instead of the neffos one.
	app.Run(iris.Addr(":80"))
}
@seraph911 seraph911 reopened this Jun 18, 2020
@kataras
Copy link
Owner

kataras commented Jul 11, 2020

Hello @seraph911,

Sorry for the late response, I literally had zero-time as I am preparing the iris for its next big release. Let me check these two issues tomorrow, be sure, I will fix them.

@kataras kataras added the bug Something isn't working label Jul 11, 2020
@seraph911
Copy link
Author

Many thanks for your kind response, @kataras.
So glad to hear that. I am looking forward to having your new version.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants