WebSocket 3 實現一對一聊天功能

2022-01-19 11:59:41 字數 2134 閱讀 1716

功能介紹:實現a和b單獨聊天功能,即a發訊息給b只能b接收,同樣b向a發訊息只能a接收。

先看演示效果:

* 功能描述:簡單版單人聊天

* 這裡沒有用到@sendto("/topic/game_chat")來指定訂閱位址,而是通過simpmessagingtemplate來指定 */

@controller

public

class

ptpcontoller

}這裡和前面的公告訊息,最大的區別就是介面上沒有通過@sendto("/topic/game_chat")來傳送訊息。

(1)@sendto和simpmessagingtemplate區別

spring websocket基於註解的@sendto和@sendtouser雖然方便,但是有侷限性,例如我這樣子的需求,我想手動的把訊息推送給某個人,或者特定一組人,怎麼辦,

@sendto只能推送給所有人(它是乙個具體位址,一點都不靈活),@sendtouser只能推送給請求訊息的那個人,這時,我們可以利用simpmessagingtemplate這個類

simpmessagingtemplate有倆個推送的方法

convertandsend(destination, payload);            //

將訊息廣播到特定訂閱路徑中,類似@sendto

convertandsendtouser(user, destination, payload);//

將訊息推送到固定的使用者訂閱路徑中,類似@sendtouser

import

com.jincou.websocket.model.inmessage;

import

com.jincou.websocket.model.outmessage;

import

org.springframework.beans.factory.annotation.autowired;

import

org.springframework.messaging.simp.simpmessagingtemplate;

import

org.springframework.stereotype.service;

/*** 功能描述:簡單訊息模板,用來推送訊息 */

@service

public

class

websocketservice

function connect() , function (frame) );

});}function sendname()

其它地方也和之前公告的一樣,下面是修改的地方

class="col-md-6">

以 a 向 b 傳送訊息為例

(1)form輸入框輸入:「a」,to輸入框輸入 「b」 點選「connect」建立websocket連線

(2)那麼的 a 使用者的訂閱位址就是'/chat/single/a'

(3)前端在「content」按鈕中輸入「你今天吃雞了嗎?」,再點選「傳送」按鈕

(4)後台通過接受處理就成了:

template.convertandsend("/chat/single/b",

new outmessage(" a 傳送:你今天吃雞了嗎?"));

那麼 b 向 a 傳送性質一模一樣。就可以實現一對一聊天。

注意:這個只是演示,並不是真正一對一聊天,一般如果實現一對一聊天,那麼form和to都應該是唯一的,比如該使用者的userid,這樣就可以真正實現一對一聊天了。

github原始碼

想太多,做太少,中間的落差就是煩惱。想沒有煩惱,要麼別想,要麼多做。中校

一對一聊天實現步驟

2 在qqchat 中new message,將message中的內容傳送給伺服器oos。問題來了,那麼我怎麼樣取得客戶端的socket呢?把qqclientconserver裡面的s做成靜態的。那麼qqchat 也可以使用了。3 serconclientthread,輸入流ois接收來自qqcha...

Mybatis註解實現 一對一對映 一對多對映

results id usermap value one 相當於 xml 檔案中的 association 標籤 column 代表資料庫中的字段 property 代表 pojo 類中的屬性 和上面的column 形成一一對應的關係 results 註解對應的 id值 可以使用 resultmap...

vue django實現一對一聊天功能

vue django實現一對一聊天和訊息推送的功能。主要是通過websocket,由於django不支援websocket,所以我使用了django channels。考慮到儲存量的問題,我並沒有把聊天資訊存入資料庫,服務端的作用相當於乙個中轉站。我只講述實現功能的結構性 具體的實現還請大家看源 首...