草庐IT

WEBSOCKET

全部标签

go - 为什么 gorilla websocket 聊天示例没有发现必须使用 sync.RWMutex 来访问和编辑 map ?

在聊天示例中有一个名为hub.go的文件。https://github.com/gorilla/websocket/blob/master/examples/chat/hub.go我对该文件做了一些修改,它看起来像这样:typehubstruct{//Registeredconnections.connectionsmap[int64]*connectionsync.RWMutex//Inboundmessagesfromtheconnections.broadcastchan[]byte//Registerrequestsfromtheconnections.registerchan

GO - 代码在函数返回后停止执行

所以,我正在尝试构建一个websocket服务器。我遇到了这个有趣的错误,我一辈子都弄不明白为什么会这样。注意:代码片段中的评论仅适用于本文。阅读它们。我有这个功能:funcJoin(ws*websocket.Conn){Log.Connection(ws)enc:=json.NewEncoder(ws)dec:=json.NewDecoder(ws)vardJg.DiscussionJoinvardiscg.DiscussionLog.Err(dec.Decode(&dJ),"dec.Decode")ssD:=g.FindDiscussionByID(dJ.DiscussionID)

使用node简单搭建websocket服务器

背景我们都知道,http协议通信只能由客户端发起,然后服务端再做出响应;但是websocket协议最大的特点是服务端可以主动向客户端推送消息,客户端也可以主动向服务器发送消息往常实现双向通信的方法主要是轮询,客户端通过定时器,每隔一段时间就会主动发送请求给服务器,这无疑是会耗很多的流量和给服务端造成资源消耗;而websokcet实时性更强,当服务器和客户端之间交换数据时更少的控制开销。node搭建websocket服务器下载websocket依赖  websocket-npmnpmiwebsocket在文件下下创建server.js文件,跟着npm文档的例子引入使用即可/*server.js服

go - 尝试 websocket 连接时意外的响应代码 200

这里是相当新的gopher。经验有限。我正在阅读一本探索websockets的书,但我走到了死胡同。我用书中的示例组装了一个简单的聊天应用程序,当我运行它时,我遇到了以下错误:WebSocketconnectionto'ws://localhost:5000/room'failed:ErrorduringWebSockethandshake:Unexpectedresponsecode:200有人知道是什么原因造成的吗?主.gopackagemainimport("html/template""log""net/http""path/filepath""sync")typetempla

go - 如果异常断开,Websocket 会卡住

我创建了一个简单的websocket来发布JSON流。我大部分时间都工作正常,除了少数情况,我认为在循环遍历客户端向它们发送消息时,它卡在异常断开连接的客户端上。我可以在此代码中添加什么措施来缓解它?Client.goimport("github.com/gorilla/websocket")typeclientstruct{socket*websocket.Connsendchan*Message}func(c*client)read(){deferc.socket.Close()for{_,_,err:=c.socket.ReadMessage()iferr!=nil{log.In

go - 如果我不在任何地方阅读消息,则不会为 gorilla /websocket 调用 CloseHandler,我最终只会收到写入错误

我有一个使用gorilla/websocket的websocket服务器。我有一种情况,我只是将消息写入一组websockets。当我在浏览器端关闭websocket时,我的自定义CloseHandler永远不会被调用。但是,添加无限期调用ReadMessage的goroutine(直到出现某些错误)会导致调用CloseHandler。基本思路如下:在一个goroutine中,我运行这样的东西:for{forclient:=rangeclients{client.stream和其他代码,在单独的goroutine中调用,每个客户端一个:go(func(){//IfIcallwsock.

docker - 如何通过 websocket 获取 Docker 容器输出?

我正在尝试使用fmt将输出从docker容器发送到控制台,但在尝试这样做时我得到了这个。&{0xc0422a65c0{00}false0x6415a00x641540}我该怎么做?这是我的完整代码。funcmain(){imageName:="hidden/hidden"ctx:=context.Background()cli,err:=client.NewClient("tcp://0.0.0.0:0000","v0.00",nil,nil)iferr!=nil{panic(err)}fmt.Println("Pulling\""+imageName+"\"")_,err=cli.I

listen 和 serve 的 goroutine 会阻塞主进程的执行,永远不会到达以下用于通信的选择状态

我仍然完全了解goroutines和channel,所以我可能会做一些明显错误的事情。我有一个运行websocket服务器和公共(public)路由的服务,用于将客户端从https升级到wss。我正在尝试为其中一个例程附加一些拆卸代码,但第二个go调用似乎阻止了主函数的执行。我在启动时在控制台上到达Println5。我程序的其余部分运行得很愉快。我只是不能用ctrl+C杀死它(它也不需要在手动关闭后拆除)。这是相关代码(完整的主文件减去了streamAddr变量和导入):funcmain(){fmt.Println(1)flag.Parse()log.SetFlags(0)fmt.Pr

go - SetWriteDeadline 错误解读

我正在用Go编写一个websocket服务器,用于向客户端广播消息。我在每次发送时都使用SetWriteDeadline,这样广播循环就不会卡住。我的问题是:如何解释来自SetWriteDeadline的错误?特别是,我是否应该假设该特定客户端有问题并取消注册?还是恰好在此客户端上触发了服务器端问题?经过研究SetWriteDeadline,我发现deadline是将消息放到TCP栈服务端,不是客户端接收消息。所以也许更好的表达我的问题的方式是:每个websocket客户端是否有一个单独的TCP堆栈(也许这是具有大小WriteBufferSize的东西),或者这个缓冲区是否在客户端之间

xml - Spring : how to expose SimpMessagingTemplate bean to root context ?

我正在开发一个以Spring为主要框架的Javawebapp(主要使用Springcore、Springmvc、Springsecurity、Springdata、Springwebsocket)。声明message-broker在像这样的Spring上下文中提供了一个SimpMessagingTemplatebean到上下文:我必须把这个标签放在dispatcher-servlet.xml中(不是applicationContext.xml),否则客户端在尝试连接到websocket时(在初始页面加载时)将获得404。但是,由于此标签提供了SimpMessagingTemplateb