Gorilla Websocket中的WriteMessage和ReadMessage是如何工作的?
我与Gorilla Websocket一起工作,对WriteMessage和ReadMessage函数的工作方式很好奇 WriteMessage函数是否同步向客户端发送字节数据?或者ReadMessage是否主动从服务器获取数据(根据文档,我们需要创建一个事件循环来调用ReadMessage函数)Gorilla Websocket中的WriteMessage和ReadMessage是如何工作的?,go,gorilla,Go,Gorilla,我与Gorilla Websocket一起工作,对WriteMessage和ReadMessage函数的工作方式很好奇 WriteMessage函数是否同步向客户端发送字节数据?或者ReadMessage是否主动从服务器获取数据(根据文档,我们需要创建一个事件循环来调用ReadMessage函数) 如果服务器一直调用WriteMessage,但没有人读取该消息(客户端通过事件循环调用ReadMessage函数),那么会发生什么情况?是数据丢失,还是一直保存到下一个读取请求到来?谢谢。您可以在此处
如果服务器一直调用WriteMessage,但没有人读取该消息(客户端通过事件循环调用ReadMessage函数),那么会发生什么情况?是数据丢失,还是一直保存到下一个读取请求到来?谢谢。您可以在此处找到该函数的源代码: 看起来这是一种阻塞/同步方法 根据跟踪,他们在此处创建了writer: 然后他们正在写入
数据
:
if _, err = w.Write(data); err != nil {
return err
}
这是阻塞,因为它们正在关闭该函数最后一行中的连接,所以此时必须进行写入
这是返回到w
变量的io.WriteCloser
接口的行为
如果服务器一直调用WriteMessage,但没有人读取该消息(客户端通过事件循环调用ReadMessage函数),那么会发生什么情况?是数据丢失,还是一直保存到下一个读取请求到来?多谢各位
- 您应该设置写入/读取超时
- 库没有重复为您发送数据。您需要在应用程序中实现此逻辑
- 若服务器启动并接收到您的连接,(可能)它将读取您的消息(若在执行数据之前未停止)
- 若您发送了邮件,但服务器已关闭(未收到您的邮件),则您的数据将丢失
附加参考:
功能:w.Write
接口说明:io.WriteCloser
- Gorila Websocket超时:
- Gorila的超时文档:
数据
:
if _, err = w.Write(data); err != nil {
return err
}
这是阻塞,因为它们正在关闭该函数最后一行中的连接,所以此时必须进行写入
这是返回到w
变量的io.WriteCloser
接口的行为
如果服务器一直调用WriteMessage,但没有人读取该消息(客户端通过事件循环调用ReadMessage函数),那么会发生什么情况?是数据丢失,还是一直保存到下一个读取请求到来?多谢各位
- 您应该设置写入/读取超时
- 库没有重复为您发送数据。您需要在应用程序中实现此逻辑
- 若服务器启动并接收到您的连接,(可能)它将读取您的消息(若在执行数据之前未停止)
- 若您发送了邮件,但服务器已关闭(未收到您的邮件),则您的数据将丢失
附加参考:
功能:w.Write
接口说明:io.WriteCloser
- Gorila Websocket超时:
- Gorila的超时文档: