首页 > 其他分享 >即时通信系统 -- V0.3消息广播功能

即时通信系统 -- V0.3消息广播功能

时间:2023-03-07 14:45:33浏览次数:35  
标签:err -- 即时 Read user msg buf conn V0.3

在处理业务的 Handler(conn net.Conn) 方法中加入可以从当前 conn 中读取消息并广播的功能

go func() {
		buf := make([]byte, 4096)
		for {
			n, err := conn.Read(buf)
			if n == 0 {
				this.BroadCast(user, "下线")
				return
			}
			if err != nil && err != io.EOF {
				fmt.Println("Conn Read err:", err)
			}
			
			msg := string(buf[ : n - 1])
			this.BroadCast(user, msg)
		}
	}()

总结:

  1. net.Conn.Read() 可以将连接中的信息读入字节切片中,返回值为字节切片长度 n 与 err;
  2. n == 0 表示连接正常断开,广播用户下线消息,对应在 terminal 中敲 cirl + C
  3. err != nil && err != io.EOF 表面连接中的消息未读完就出现 err,说明读取出错
  4. 把字节切片转换为 msg 时要把最后的 '\n' 去除(因为在 user 的 ListenMessage 中已经给 msg 后填上换行了,否则每条消息后都会多一个换行),所以是 buf[:n-1]

标签:err,--,即时,Read,user,msg,buf,conn,V0.3
From: https://www.cnblogs.com/hzy717zsy/p/17188055.html

相关文章

  • Spring中context:annotation-config和context:component-scan区别
    Spring中context:annotation-config和context:component-scan区别<context:annotation-config/>注解扫描是针对已经在Spring容器里注册过的Bean,即特定的一些后置bea......
  • Appium打开app问题warn: The ANDROID_HOME environment variable is not set to the
    1.检查电脑上androidsdk是否配置环境变量2.检查appium上面是否读取到配置   直接在这里填上androidsdk的安装路径,保存重启后正常。 ......
  • 生成zip文件,并下载
    1.zip生成/***@paramsourceFilePath:待压缩的文件路径文件的目录,并非文件路径*@paramzipFilePath:压缩后存放路径*@paramfileName......
  • 指针与函数
    指针变量作为函数的参数如果想再函数内部修改外部变量的值,需要将外部变量的地址传递给函数  函数内部想要操作(读或写)外部数组元素,将数组名传递给函数  ......
  • 房地产APP开发功能介绍
    随着技术的发展,人们对于房地产不仅仅是通过线下实体公司去进行考察了,房地产APP的应用也越来越广泛。不少朋友想进行房地产APP开发,我们现在一起来看看房地产APP都需要哪些功......
  • TypeScript 学习笔记 — 交叉类型、条件类型和条件分发(八)
    目录交叉类型条件类型1.直接传入判断的条件2.把条件当成泛型传入3.多重条件判断4.判断接口中的类型extends父子关系(类型等级)条件分发机制实际开发中如何避免?<T,U>判断......
  • 从国家统计局网站爬取省级到村级别的行政区划代码(2022最新)
    importcn.hutool.http.HttpUtil;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.IOException;importjava.io.InputStreamReader;importj......
  • qemu_note
    qemu中新建子目录hw/test编译注意事项新建子目录hw/test中包含文件meson.build\Kconfig\trace.h\trce-eventsmeson.buildsoftmmu_ss.add(when:'CONFIG_TEST_D......
  • java断言机制(assert)
    java断言机制(assert)概述断言使用的时候不是很多,测试时会使用,springboot中也有使用,总的来说断言还是要慎重。在Java中,同样也有assert关键字,表示断言在Java中,assert关键......
  • HTML编辑器粘贴word图片且图片文件自动上传功能
    ​ 如何做到ueditor批量上传word图片?1、前端引用代码<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml......