Integrate third-party applications
Beego supports to integrate third-party application, you can customize http.Handler as follows:
web.Handler("/chat/:info(.*)", sockjs.NewHandler("/chat", opt, YouHandlerFunc))
sockjshandler implemented interface http.Handler.
Beego has an example for supporting echo app of sockjs, here is the code:
package mainimport ("log""time""gopkg.in/igm/sockjs-go.v2/sockjs")func LiveUpdate(session sockjs.Session) {var closedSession = make(chan struct{})reader := make(chan string)go func() {for {reader <- "echo"time.Sleep(time.Second)}}()go func() {for {select {case <-closedSession:returncase msg := <-reader:if err := session.Send(msg); err != nil {return}}}}()for {if _, err := session.Recv(); err == nil {continue}break}close(closedSession)log.Println("sockjs session closed")}type MainController struct {web.Controller}func (m *MainController) Get() {m.TplName = "index.html"}func main() {web.Router("/", &MainController{})web.Handler("/chat/:info(.*)", sockjs.NewHandler("/chat", sockjs.DefaultOptions, YouHandlerFunc))web.Run()}
JS code:
if (!window.location.origin) { // Some browsers (mainly IE) do not have this property, so we need to build it manually...window.location.origin = window.location.protocol + '//' + window.location.hostname + (window.location.port ? (':' + window.location.port) : '');}var recInterval = null;var socket = null;var new_conn = function() {socket = new SockJS('/live_update', null, {'protocols_whitelist': ['websocket', 'xdr-streaming', 'xhr-streaming','iframe-eventsource', 'iframe-htmlfile','xdr-polling', 'xhr-polling', 'iframe-xhr-polling','jsonp-polling']});clearInterval(recInterval);socket.onclose = function() {socket = null;recInterval = setInterval(function() {new_conn();}, 2000);};socket.onmessage = function(e) {document.getElementById("output").value += e.data +"\n";};};(function () {new_conn();})();
The above example implemented a simple echo app for sockjs, and you can use http.Handler for more extensions.
