alberliu / gim

golang写的IM服务器(服务组件形式)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

关于message表,消息的发送方和接收方如何确定

GODVvVZzz opened this issue · comments

commented

非常感谢作者的开源 !有问题想请教一下~


-- Table structure for message


DROP TABLE IF EXISTS message;
CREATE TABLE message
(
id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
user_id bigint(20) unsigned NOT NULL COMMENT '所属类型的id',
request_id bigint(20) NOT NULL COMMENT '请求id',
code tinyint(4) NOT NULL COMMENT '消息类型',
content blob NOT NULL COMMENT '消息内容',
seq bigint(20) unsigned NOT NULL COMMENT '消息序列号',
send_time datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP (3) COMMENT '消息发送时间',
status tinyint(255) NOT NULL DEFAULT '0' COMMENT '消息状态,0:未处理1:消息撤回',
create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (id),
UNIQUE KEY uk_user_id_seq (user_id, seq) USING BTREE
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_bin COMMENT ='消息';

这个表,只有一个userId,如何确定每条消息的发送方和接收方呢?

commented

user_id是接受方的,发送方在content里面

commented

哦好的,我看到了,content中存的是下面格式的数据。感谢解答!

	push := pb.UserMessagePush{
		Sender:     sender,
		ReceiverId: req.ReceiverId,
		Content:    req.Content,
	}
commented

还想问下 这个request_id是用来追踪会话的吗
一个request_id代表一个会话记录?

commented

是用来追踪消息的,一个消息一个request_id

commented

那request_id一般什么时候传呢?这点不太理解,有点迷

目前我看代码中发消息时候是从ctx中取的,如下:
internal/logic/domain/message/service/message_service.go 84-92行

		selfMessage := model.Message{
			UserId:    toUserID,
			RequestId: grpclib.GetCtxRequestId(ctx),
			Code:      message.Code,
			Content:   message.Content,
			Seq:       seq,
			SendTime:  util.UnunixMilliTime(message.SendTime),
			Status:    int32(pb.MessageStatus_MS_NORMAL),
		}