Andreas: "dann durchsuch noch mal die foren, das kann doch nicht sein das das niemand da draussen hat das problem." Hatte jemand, und der entscheidende Satz stand in einem Bugreport eines anderen Projekts: "DMs work fine." Nachgemessen, und es stimmt: Direktnachricht -> posted kommt SOFORT eigener Kanalbeitrag -> posted kommt Kanalbeitrag eines anderen -> kommt nie Damit ist die Lage eine voellig andere als gedacht. Mit einem Agenten zu reden -- der Anwendungsfall, um den es Andreas ging -- laeuft in Echtzeit ueber eine DM. Der Boden deckt nur noch Erwaehnungen in Kanaelen ab, und das ist der Fall, bei dem 15 Sekunden niemanden stoeren. Dabei ausserdem einen eigenen Fehler korrigiert: Ich hatte den Test "direkt am Container, ohne Caddy" als erledigt dargestellt, obwohl das sed dafuer fehlgeschlagen war und gegen den Proxy gemessen wurde. Nachgeholt: ws://192.168.1.142:8065 direkt verhaelt sich genauso. Der Proxy ist jetzt wirklich ausgeschlossen.
21 lines
827 B
Go
21 lines
827 B
Go
//go:build ignore
|
|
package main
|
|
import ("fmt";"net/http";"os";"time";"github.com/gorilla/websocket")
|
|
func main(){
|
|
ziel:=os.Getenv("WSURL")
|
|
c,_,err:=websocket.DefaultDialer.Dial(ziel,http.Header{})
|
|
if err!=nil{fmt.Println("dial:",err);return}
|
|
fmt.Println(" verbunden:",ziel)
|
|
c.WriteJSON(map[string]interface{}{"seq":1,"action":"authentication_challenge","data":map[string]string{"token":os.Getenv("TOK")}})
|
|
ende:=time.Now().Add(40*time.Second)
|
|
for time.Now().Before(ende){
|
|
c.SetReadDeadline(time.Now().Add(10*time.Second))
|
|
var m map[string]interface{}
|
|
if err:=c.ReadJSON(&m);err!=nil{
|
|
if ne,ok:=err.(interface{Timeout() bool});ok&&ne.Timeout(){fmt.Println(" (still)");continue}
|
|
fmt.Println(" read:",err);return
|
|
}
|
|
if e,_:=m["event"].(string);e!=""{fmt.Println(" EVENT:",e)}
|
|
}
|
|
}
|