PHP 인스턴트 메시징 설계 및 구현

상세 설계 및 인스턴트 메시징의 구현 (PHP + GatewayWorker + 레디 스)

우리는 기능을 구현해야

  • 한 채팅 (귓속말)
  • 채팅 일대 (그룹 채팅)
  • 마찬가지로 QQ, 미세 문자 등 실시간 채팅 메시지 목록

공구 선택

  • GatewayWorker는 다음과 같은 특징을 가지고 있습니다 (더 많은 네트워크 시험관 설명서를 참조하십시오)

    • 기반 Workerman 개발
    • 기반 게이트웨이, 작업자 프로세스 모델
    • 분산 배치를위한 지원
    • 높은 동시성을 지원
    • 모든 클라이언트에 글로벌 브로드 캐스트 또는 푸시 데이터를 지원
    • 응용 프로그램 계층의 다양한 프로토콜 지원
    • 멀티 프로토콜 지원
    • 객체 또는 자원은 영구적 인 지원을 유지하기 위해
    • 고성능
    • 다른 프로젝트와 쉽게 통합
    • 긴 연결을 지원
우리는 주로이 프로토콜을 WebSocket을 사용하고,이 프레임 워크는 GatewayWorker가 독립적으로 배포 할 수 있습니다 ThinkPHP, laravel와 다른 프레임 워크와 함께 사용하는 관련 비즈니스 로직에 대한 책임을 매우 편리 PHP입니다
  • 키 조작, 설정 목록을 레디 스.
인스턴트 메시징, 가장 중요한 응답 속도, 우리는 "메시지 목록"그래서 다음 읽지 않은 메시지, 읽지 않은 수, 마지막 메시지 내용, 시간 등이있을 것를 표시해야합니다.

웹 소켓 및 GatewayWorker 원리는 더 이상 사용 서사는, 어린이 신발, 어머니의 정도를 이해하지 마십시오 것

결과는 보여

그룹 채팅 | 속삭임 렌더링

mahua

메시지 목록의 렌더링

mahua

데이터베이스 설계 (그룹 채팅, 별도로 개인 채팅)

위스퍼 디자인 (디자인 적요)


매개 변수 이름 설명
신분증 기본 키
SENDER_ID 보낸 사람 ID
receive_id 수신기 ID
chat_identify 확인 : 대화와 B, B와 대화를. 기록 AB
MESSAGE_DETAILS 메시지 내용
last_time_at 채팅 기록 간격이 소정 시간을 초과
  • 위해서는이 분야에서 chat_identify 필드의 사용은 더 쉽게 A, B 사이의 채팅을 찾을 수 있습니다.
  • last_time_at QQ, 상기 마이크로 채널 사이의 채팅은, 시간 간격 당 하나의 채팅하지 표시 시각, 기록 될

그룹 채팅 (디자인 적요)

  • 그리고 속삭임 좋아하지만, 수신기 ID는, GROUP_ID 그룹 ID가됩니다.

메시지 목록 디자인은, "개인 채팅, 그룹 채팅의"의 효과를 볼 것으로 예상하고 그래서 목록 표시, 그리고 데이터 변경이 실시간으로 발생합니다. 레디 스 여기

각 사용자 목록은 키 = message_list의 모음입니다 : USER_ID
Redis集合存储 消息类型 1私信,2群聊

message_list:user_id{
    json_encode(['消息类型','接收者id|群组id']),
    json_encode(['消息类型','接收者id|群组id']),
    json_encode(['消息类型','接收者id|群组id']),
}

查找每个人的消息列表,直接取出该列表即可,但每个成员 都要对应 ‘未读消息数量’,‘最后一条消息内容’,‘最后一条小时时间’。由于是可变的,所以需要单独存储

Redis 键值 key = message_content:user_id_消息类型_id

key =>json_encode(['消息数量','最后一条消息内容','时间'])

上面 集合列表里的每一个成员都 对应这里的每个键值。
  • 뉴스는 모든 작업 레디 스, 적절한 업데이트를 업데이트합니다.
  • 이 속도는 의심의 여지가 없다 매우 빠르게 레디 스.

지역의 요구의 후속 최적화

  • 기록 테이블 채팅 그룹 | 속삭임. 현재의 디자인은 하나의 양식 라이브러리입니다. 물론, 사용자의 증가, 피할 수없는 파열과 함께. 쿼리의 응답 속도에 영향을 미칩니다.

    • (해결 아무것도 이상 : 서브 라이브러리 하위 테이블, 전송 백업 기록)
  • GatewayWorker 통신 프레임 워크는 높은 동시성을 지원하지 수, 단일 서버 배포입니다.

질문 및 제안 사항이 있으면 여기에 단지 몇 가지 간단한 박람회는 인스턴트 메시징 위해 한 설계, 코멘트 섹션에 회신 해 주시기 바랍니다.

추천

출처www.cnblogs.com/jlfw/p/12049424.html