간편한 채팅 시스템 - 메시지 전달 서버

1647 단어 QT위챗 애플릿
메시지 전송 서버는 메시지 대기열에서 온 데이터를 받아들여 디코딩, 식별 등을 하고 마지막으로 분류를 나눈다.예를 들어 채팅 시스템은 같은 그룹과 같은 세션의 정보를 같은 그룹 서비스로 전송한다(물론 아직 같은 그룹 서비스를 전송하지 못했다). 기본적인 사상은 그룹 QQ번호와 같은hash를 만들어서 전송하거나 각 서비스의 부하 정도를 감시하여 새로운 채팅을 해당하는 채팅 서비스로 옮긴다는 것이다.식별에 실패하면 메시지 전송 서버는 메시지를 처리하지 않고 메시지를 메시지 대기열에 보존하고 알림을 보냅니다. 온라인 업그레이드가 필요하면 새로운 서비스를 추가하고 메시지 전송 서비스를 단계적으로 업그레이드하면 됩니다.
기본 코드 논리는 다음과 같습니다.
//  
func DealMsg(delivery amqp.Delivery) {
	var json = jsoniter.ConfigCompatibleWithStandardLibrary
	var transfer1 transfer
	err := json.Unmarshal(delivery.Body, &transfer1)
	if err != nil {
		fmt.Println(err)
		return
	}
	//	from := transfer1.From
	var data1 Data
	// err = json.Unmarshal(transfer1.Data, &data1)
	fmt.Println((string(delivery.Body)))
	data1 = transfer1.Data
	Type := data1.Type
	//delivery.Ack(true)
	if err != nil {
		fmt.Println("json error1:", err)
		return
	}

	switch Type {
	case Login, Register, GetMyFriends, LoseConnect, AddUser, OtherAddFriend, ServerUserChangePassword:
		//    
		//	fmt.Println(" ")
		err = mq.Publish(UserControlServer, delivery.Body)
		if err != nil {
			fmt.Println("RabbitMq:", err.Error())
		}
		delivery.Ack(true)
	case SendUserMsg, ChatHistory, SendGroupMsg:
		//    
		err = mq.Publish(ChatServer, delivery.Body)
		if err != nil {
			fmt.Println("RabbitMq:", err.Error())
		}
		delivery.Ack(true)
	case CreateGroup, GetGroupList, GetGroupMember, JoinGroup, OtherAddGroup, ServerInviteUserAddGroup:
		//    
		err = mq.Publish(GroupServer, delivery.Body)
		if err != nil {
			fmt.Println("RabbitMq:", err.Error())
		}
		delivery.Ack(true)
	}
}

좋은 웹페이지 즐겨찾기